blob: 6011f42f9cf62da450401e564e06f973fc8397ca [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
35extern inline int ei() { return 123; }
36
37inline int foo() {
38 return ei();
39}
40
41int bar() { return foo(); }
42
43
Chris Lattnerdbb5a372009-04-14 06:44:48 +000044inline 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
50extern inline __attribute__((gnu_inline)) void gnu_ei_inline() {}
51void (*P)() = gnu_ei_inline;
52
Douglas Gregorb3efa982009-04-23 18:22:55 +000053// <rdar://problem/6818429>
54int test1();
55inline int test1() { return 4; }
56inline int test2() { return 5; }
57inline int test2();
58int test2();
59
60void test_test1() { test1(); }
61void test_test2() { test2(); }
62
63// PR3989
64extern inline void test3() __attribute__((gnu_inline));
65inline void test3() {}