diff options
Diffstat (limited to 'clang/test/CodeGen/functions.c')
-rw-r--r-- | clang/test/CodeGen/functions.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/clang/test/CodeGen/functions.c b/clang/test/CodeGen/functions.c new file mode 100644 index 0000000..28e4bd0 --- /dev/null +++ b/clang/test/CodeGen/functions.c @@ -0,0 +1,67 @@ +// RUN: %clang_cc1 %s -triple i386-unknown-unknown -emit-llvm -o - -verify | FileCheck %s + +int g(); + +int foo(int i) { + return g(i); +} + +int g(int i) { + return g(i); +} + +// rdar://6110827 +typedef void T(void); +void test3(T f) { + f(); +} + +int a(int); +int a() {return 1;} + +void f0() {} +// CHECK: define void @f0() + +void f1(); +void f2(void) { +// CHECK: call void bitcast (void ()* @f1 to void (i32, i32, i32)*)(i32 1, i32 2, i32 3) + f1(1, 2, 3); +} +// CHECK: define void @f1() +void f1() {} + +// CHECK: define {{.*}} @f3{{\(\)|\(.*sret.*\)}} +struct foo { int X, Y, Z; } f3() { + while (1) {} +} + +// PR4423 - This shouldn't crash in codegen +void f4() {} +void f5() { f4(42); } //expected-warning {{too many arguments}} + +// Qualifiers on parameter types shouldn't make a difference. +static void f6(const float f, const float g) { +} +void f7(float f, float g) { + f6(f, g); +// CHECK: define void @f7(float{{.*}}, float{{.*}}) +// CHECK: call void @f6(float{{.*}}, float{{.*}}) +} + +// PR6911 - incomplete function types +struct Incomplete; +void f8_callback(struct Incomplete); +void f8_user(void (*callback)(struct Incomplete)); +void f8_test() { + f8_user(&f8_callback); +// CHECK: define void @f8_test() +// CHECK: call void @f8_user({{.*}}* bitcast (void ()* @f8_callback to {{.*}}*)) +// CHECK: declare void @f8_user({{.*}}*) +// CHECK: declare void @f8_callback() +} + +// PR10204: don't crash +static void test9_helper(void) {} +void test9() { + (void) test9_helper; +} |