1 | // RUN: %clang_cc1 %s -triple i386-unknown-unknown -emit-llvm -o - -verify | FileCheck %s |
2 | |
3 | int g(); |
4 | |
5 | int foo(int i) { |
6 | return g(i); |
7 | } |
8 | |
9 | int g(int i) { |
10 | return g(i); |
11 | } |
12 | |
13 | // rdar://6110827 |
14 | typedef void T(void); |
15 | void test3(T f) { |
16 | f(); |
17 | } |
18 | |
19 | int a(int); |
20 | int a() {return 1;} |
21 | |
22 | void f0() {} |
23 | // CHECK-LABEL: define void @f0() |
24 | |
25 | void f1(); |
26 | void f2(void) { |
27 | // CHECK: call void @f1() |
28 | f1(1, 2, 3); |
29 | } |
30 | // CHECK-LABEL: define void @f1() |
31 | void f1() {} |
32 | |
33 | // CHECK: define {{.*}} @f3{{\(\)|\(.*sret.*\)}} |
34 | struct foo { int X, Y, Z; } f3() { |
35 | while (1) {} |
36 | } |
37 | |
38 | // PR4423 - This shouldn't crash in codegen |
39 | void f4() {} |
40 | void f5() { f4(42); } //expected-warning {{too many arguments}} |
41 | |
42 | // Qualifiers on parameter types shouldn't make a difference. |
43 | static void f6(const float f, const float g) { |
44 | } |
45 | void f7(float f, float g) { |
46 | f6(f, g); |
47 | // CHECK: define void @f7(float{{.*}}, float{{.*}}) |
48 | // CHECK: call void @f6(float{{.*}}, float{{.*}}) |
49 | } |
50 | |
51 | // PR6911 - incomplete function types |
52 | struct Incomplete; |
53 | void f8_callback(struct Incomplete); |
54 | void f8_user(void (*callback)(struct Incomplete)); |
55 | void f8_test() { |
56 | f8_user(&f8_callback); |
57 | // CHECK-LABEL: define void @f8_test() |
58 | // CHECK: call void @f8_user({{.*}}* bitcast (void ()* @f8_callback to {{.*}}*)) |
59 | // CHECK: declare void @f8_user({{.*}}*) |
60 | // CHECK: declare void @f8_callback() |
61 | } |
62 | |
63 | // PR10204: don't crash |
64 | static void test9_helper(void) {} |
65 | void test9() { |
66 | (void) test9_helper; |
67 | } |
68 | |