blob: 76d90eda2100b6fb544b5bde11367ab00fd19f45 [file] [log] [blame]
Daniel Dunbar4fcfde42009-11-08 01:45:36 +00001// RUN: echo "GNU89 tests:"
2// RUN: clang %s -emit-llvm -S -o %t -std=gnu89
3// RUN: grep "define available_externally i32 @ei()" %t
4// RUN: grep "define i32 @foo()" %t
5// RUN: grep "define i32 @bar()" %t
6// RUN: grep "define void @unreferenced1()" %t
7// RUN: not grep unreferenced2 %t
8// RUN: grep "define void @gnu_inline()" %t
9// RUN: grep "define available_externally void @gnu_ei_inline()" %t
10// RUN: grep "define i32 @test1" %t
11// RUN: grep "define i32 @test2" %t
12// RUN: grep "define void @test3()" %t
13// RUN: grep "define available_externally i32 @test4" %t
14// RUN: grep "define available_externally i32 @test5" %t
Chris Lattnerd9d049a2009-04-14 06:27:57 +000015
Daniel Dunbar4fcfde42009-11-08 01:45:36 +000016// RUN: echo "\nC99 tests:"
17// RUN: clang %s -emit-llvm -S -o %t -std=c99
18// RUN: grep "define i32 @ei()" %t
19// RUN: grep "define available_externally i32 @foo()" %t
20// RUN: grep "define i32 @bar()" %t
21// RUN: not grep unreferenced1 %t
22// RUN: grep "define void @unreferenced2()" %t
23// RUN: grep "define void @gnu_inline()" %t
24// RUN: grep "define available_externally void @gnu_ei_inline()" %t
25// RUN: grep "define i32 @test1" %t
26// RUN: grep "define i32 @test2" %t
27// RUN: grep "define void @test3" %t
28// RUN: grep "define available_externally i32 @test4" %t
29// RUN: grep "define available_externally i32 @test5" %t
Chris Lattnerd9d049a2009-04-14 06:27:57 +000030
Daniel Dunbar4fcfde42009-11-08 01:45:36 +000031// RUN: echo "\nC++ tests:"
32// RUN: clang %s -emit-llvm -S -o %t -std=c++98
33// RUN: grep "define linkonce_odr i32 @_Z2eiv()" %t
34// RUN: grep "define linkonce_odr i32 @_Z3foov()" %t
35// RUN: grep "define i32 @_Z3barv()" %t
36// RUN: not grep unreferenced %t
37// RUN: grep "define void @_Z10gnu_inlinev()" %t
Chris Lattnerd55a71d2009-04-22 00:03:30 +000038// RUN: grep "define available_externally void @_Z13gnu_ei_inlinev()" %t
Chris Lattnerd9d049a2009-04-14 06:27:57 +000039
Eli Friedmaneb32fde2009-04-28 03:13:54 +000040extern __inline int ei() { return 123; }
Chris Lattnerd9d049a2009-04-14 06:27:57 +000041
Eli Friedmaneb32fde2009-04-28 03:13:54 +000042__inline int foo() {
Chris Lattnerd9d049a2009-04-14 06:27:57 +000043 return ei();
44}
45
46int bar() { return foo(); }
47
48
Eli Friedmaneb32fde2009-04-28 03:13:54 +000049__inline void unreferenced1() {}
50extern __inline void unreferenced2() {}
Chris Lattnerd9d049a2009-04-14 06:27:57 +000051
Chris Lattnercf2a7212009-04-20 19:12:28 +000052__inline __attribute((__gnu_inline__)) void gnu_inline() {}
Chris Lattnerd55a71d2009-04-22 00:03:30 +000053
54// PR3988
Eli Friedmaneb32fde2009-04-28 03:13:54 +000055extern __inline __attribute__((gnu_inline)) void gnu_ei_inline() {}
Chris Lattnerd55a71d2009-04-22 00:03:30 +000056void (*P)() = gnu_ei_inline;
57
Douglas Gregorb3efa982009-04-23 18:22:55 +000058// <rdar://problem/6818429>
59int test1();
Eli Friedmaneb32fde2009-04-28 03:13:54 +000060__inline int test1() { return 4; }
61__inline int test2() { return 5; }
62__inline int test2();
Douglas Gregorb3efa982009-04-23 18:22:55 +000063int test2();
64
65void test_test1() { test1(); }
66void test_test2() { test2(); }
67
68// PR3989
Eli Friedmaneb32fde2009-04-28 03:13:54 +000069extern __inline void test3() __attribute__((gnu_inline));
Douglas Gregor1fc09a92009-09-13 07:46:26 +000070__inline void __attribute__((gnu_inline)) test3() {}
Douglas Gregor9f9bf252009-04-28 06:37:30 +000071
72extern int test4(void);
73extern __inline __attribute__ ((__gnu_inline__)) int test4(void)
74{
Mike Stumpc36541e2009-07-21 20:52:43 +000075 return 0;
Douglas Gregor9f9bf252009-04-28 06:37:30 +000076}
77
78void test_test4() { test4(); }
79
Douglas Gregor1fc09a92009-09-13 07:46:26 +000080extern __inline int test5(void) __attribute__ ((__gnu_inline__));
Douglas Gregor9f9bf252009-04-28 06:37:30 +000081extern __inline int __attribute__ ((__gnu_inline__)) test5(void)
82{
Mike Stumpc36541e2009-07-21 20:52:43 +000083 return 0;
Douglas Gregor9f9bf252009-04-28 06:37:30 +000084}
85
86void test_test5() { test5(); }