summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGen/inline.c
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-04-23 18:22:55 +0000
committerDouglas Gregor <dgregor@apple.com>2009-04-23 18:22:55 +0000
commit89c8e000cf9905ae4b895d02963ef557d1e5eec9 (patch)
treebdc3996d90302847947834656bb134c307e1dfe7 /clang/test/CodeGen/inline.c
parenta6acb390e70453fd129cdaa19bdf8b0e206081f5 (diff)
downloadbcm5719-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.c18
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() {}
OpenPOWER on IntegriCloud