blob: 7bdf76de19b0fb69b63e09bd15d87d8a4aa1d673 [file] [log] [blame]
Chris Lattner86daeee2009-04-14 16:44:36 +00001// RUN: echo "C89 tests:" &&
Chris Lattnerd9d049a2009-04-14 06:27:57 +00002// RUN: clang %s -emit-llvm -S -o %t -std=c89 &&
3// RUN: grep "define available_externally i32 @ei()" %t &&
4// RUN: grep "define i32 @foo()" %t &&
5// RUN: grep "define i32 @bar()" %t &&
Chris Lattnerdbb5a372009-04-14 06:44:48 +00006// RUN: grep "define void @unreferenced1()" %t &&
7// RUN: not grep unreferenced2 %t &&
Chris Lattner86daeee2009-04-14 16:44:36 +00008// RUN: grep "define void @gnu_inline()" %t &&
Chris Lattnerd55a71d2009-04-22 00:03:30 +00009// RUN: grep "define available_externally void @gnu_ei_inline()" %t &&
Douglas Gregorb3efa982009-04-23 18:22:55 +000010// RUN: grep "define void @test3()" %t &&
11// RUN: grep "define i32 @test1" %t &&
12// RUN: grep "define i32 @test2" %t &&
Chris Lattnerd9d049a2009-04-14 06:27:57 +000013
Chris Lattner86daeee2009-04-14 16:44:36 +000014// RUN: echo "\nC99 tests:" &&
Chris Lattnerd9d049a2009-04-14 06:27:57 +000015// RUN: clang %s -emit-llvm -S -o %t -std=c99 &&
Chris Lattnercbb8fc12009-04-14 20:25:53 +000016// RUN: grep "define i32 @ei()" %t &&
Chris Lattnerd9d049a2009-04-14 06:27:57 +000017// RUN: grep "define available_externally i32 @foo()" %t &&
18// RUN: grep "define i32 @bar()" %t &&
Chris Lattnercbb8fc12009-04-14 20:25:53 +000019// RUN: not grep unreferenced1 %t &&
20// RUN: grep "define void @unreferenced2()" %t &&
Chris Lattner86daeee2009-04-14 16:44:36 +000021// RUN: grep "define void @gnu_inline()" %t &&
Chris Lattnerd55a71d2009-04-22 00:03:30 +000022// RUN: grep "define available_externally void @gnu_ei_inline()" %t &&
Douglas Gregorb3efa982009-04-23 18:22:55 +000023// RUN: grep "define i32 @test1" %t &&
24// RUN: grep "define i32 @test2" %t &&
Chris Lattnerd9d049a2009-04-14 06:27:57 +000025
Chris Lattner86daeee2009-04-14 16:44:36 +000026// RUN: echo "\nC++ tests:" &&
Chris Lattnerd9d049a2009-04-14 06:27:57 +000027// RUN: clang %s -emit-llvm -S -o %t -std=c++98 &&
Chris Lattnercbb8fc12009-04-14 20:25:53 +000028// RUN: grep "define linkonce_odr i32 @_Z2eiv()" %t &&
Chris Lattnerd9d049a2009-04-14 06:27:57 +000029// RUN: grep "define linkonce_odr i32 @_Z3foov()" %t &&
30// RUN: grep "define i32 @_Z3barv()" %t &&
Chris Lattner86daeee2009-04-14 16:44:36 +000031// RUN: not grep unreferenced %t &&
Chris Lattnerd55a71d2009-04-22 00:03:30 +000032// RUN: grep "define void @_Z10gnu_inlinev()" %t &&
33// RUN: grep "define available_externally void @_Z13gnu_ei_inlinev()" %t
Chris Lattnerd9d049a2009-04-14 06:27:57 +000034
Eli Friedmaneb32fde2009-04-28 03:13:54 +000035extern __inline int ei() { return 123; }
Chris Lattnerd9d049a2009-04-14 06:27:57 +000036
Eli Friedmaneb32fde2009-04-28 03:13:54 +000037__inline int foo() {
Chris Lattnerd9d049a2009-04-14 06:27:57 +000038 return ei();
39}
40
41int bar() { return foo(); }
42
43
Eli Friedmaneb32fde2009-04-28 03:13:54 +000044__inline void unreferenced1() {}
45extern __inline void unreferenced2() {}
Chris Lattnerd9d049a2009-04-14 06:27:57 +000046
Chris Lattnercf2a7212009-04-20 19:12:28 +000047__inline __attribute((__gnu_inline__)) void gnu_inline() {}
Chris Lattnerd55a71d2009-04-22 00:03:30 +000048
49// PR3988
Eli Friedmaneb32fde2009-04-28 03:13:54 +000050extern __inline __attribute__((gnu_inline)) void gnu_ei_inline() {}
Chris Lattnerd55a71d2009-04-22 00:03:30 +000051void (*P)() = gnu_ei_inline;
52
Douglas Gregorb3efa982009-04-23 18:22:55 +000053// <rdar://problem/6818429>
54int test1();
Eli Friedmaneb32fde2009-04-28 03:13:54 +000055__inline int test1() { return 4; }
56__inline int test2() { return 5; }
57__inline int test2();
Douglas Gregorb3efa982009-04-23 18:22:55 +000058int test2();
59
60void test_test1() { test1(); }
61void test_test2() { test2(); }
62
63// PR3989
Eli Friedmaneb32fde2009-04-28 03:13:54 +000064extern __inline void test3() __attribute__((gnu_inline));
65__inline void test3() {}