diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-04-23 18:22:55 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-04-23 18:22:55 +0000 |
commit | 89c8e000cf9905ae4b895d02963ef557d1e5eec9 (patch) | |
tree | bdc3996d90302847947834656bb134c307e1dfe7 /clang/test/CodeGen/inline.c | |
parent | a6acb390e70453fd129cdaa19bdf8b0e206081f5 (diff) | |
download | bcm5719-llvm-89c8e000cf9905ae4b895d02963ef557d1e5eec9.tar.gz bcm5719-llvm-89c8e000cf9905ae4b895d02963ef557d1e5eec9.zip |
Fix handling of C99 "extern inline" semantics when dealing with
multiple declarations of the function. Should fix PR3989 and
<rdar://problem/6818429>.
llvm-svn: 69905
Diffstat (limited to 'clang/test/CodeGen/inline.c')
-rw-r--r-- | clang/test/CodeGen/inline.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/clang/test/CodeGen/inline.c b/clang/test/CodeGen/inline.c index eb8ee718d32..6011f42f9cf 100644 --- a/clang/test/CodeGen/inline.c +++ b/clang/test/CodeGen/inline.c @@ -7,6 +7,9 @@ // RUN: not grep unreferenced2 %t && // RUN: grep "define void @gnu_inline()" %t && // RUN: grep "define available_externally void @gnu_ei_inline()" %t && +// RUN: grep "define void @test3()" %t && +// RUN: grep "define i32 @test1" %t && +// RUN: grep "define i32 @test2" %t && // RUN: echo "\nC99 tests:" && // RUN: clang %s -emit-llvm -S -o %t -std=c99 && @@ -17,6 +20,8 @@ // RUN: grep "define void @unreferenced2()" %t && // RUN: grep "define void @gnu_inline()" %t && // RUN: grep "define available_externally void @gnu_ei_inline()" %t && +// RUN: grep "define i32 @test1" %t && +// RUN: grep "define i32 @test2" %t && // RUN: echo "\nC++ tests:" && // RUN: clang %s -emit-llvm -S -o %t -std=c++98 && @@ -45,3 +50,16 @@ __inline __attribute((__gnu_inline__)) void gnu_inline() {} extern inline __attribute__((gnu_inline)) void gnu_ei_inline() {} void (*P)() = gnu_ei_inline; +// <rdar://problem/6818429> +int test1(); +inline int test1() { return 4; } +inline int test2() { return 5; } +inline int test2(); +int test2(); + +void test_test1() { test1(); } +void test_test2() { test2(); } + +// PR3989 +extern inline void test3() __attribute__((gnu_inline)); +inline void test3() {} |