diff options
Diffstat (limited to 'test/Sema/attr-alias-elf.c')
-rw-r--r-- | test/Sema/attr-alias-elf.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/test/Sema/attr-alias-elf.c b/test/Sema/attr-alias-elf.c new file mode 100644 index 0000000..88bd7b7 --- /dev/null +++ b/test/Sema/attr-alias-elf.c @@ -0,0 +1,54 @@ +// RUN: %clang_cc1 -triple x86_64-pc-linux -fsyntax-only -verify -emit-llvm-only %s + +void f1(void) __attribute__((alias("g1"))); +void g1(void) { +} + +void f2(void) __attribute__((alias("g2"))); // expected-error {{alias must point to a defined variable or function}} + + +void f3(void) __attribute__((alias("g3"))); // expected-error {{alias must point to a defined variable or function}} +void g3(void); + + +void f4() __attribute__((alias("g4"))); +void g4() {} +void h4() __attribute__((alias("f4"))); + +void f5() __attribute__((alias("g5"))); +void h5() __attribute__((alias("f5"))); +void g5() {} + +void g6() {} +void f6() __attribute__((alias("g6"))); +void h6() __attribute__((alias("f6"))); + +void g7() {} +void h7() __attribute__((alias("f7"))); +void f7() __attribute__((alias("g7"))); + +void h8() __attribute__((alias("f8"))); +void g8() {} +void f8() __attribute__((alias("g8"))); + +void h9() __attribute__((alias("f9"))); +void f9() __attribute__((alias("g9"))); +void g9() {} + +void f10() __attribute__((alias("g10"))); // expected-error {{alias definition is part of a cycle}} +void g10() __attribute__((alias("f10"))); // expected-error {{alias definition is part of a cycle}} + +// FIXME: This could be a bit better, h10 is not part of the cycle, it points +// to it. +void h10() __attribute__((alias("g10"))); // expected-error {{alias definition is part of a cycle}} + +extern int a1 __attribute__((alias("b1"))); +int b1 = 42; + +extern int a2 __attribute__((alias("b2"))); // expected-error {{alias must point to a defined variable or function}} + +extern int a3 __attribute__((alias("b3"))); // expected-error {{alias must point to a defined variable or function}} +extern int b3; + +extern int a4 __attribute__((alias("b4"))); // expected-error {{alias must point to a defined variable or function}} +typedef int b4; |