"inline", we weren't giving the definition weak linkage because the "inline" bit wasn't propagated. This was a longstanding FIXME that, somehow, hadn't triggered a bug in the wild. Fix this problem by tracking whether any declaration was marked "inline", and clean up the semantics of GNU's "extern inline" semantics calculation based on this change. Fixes <rdar://problem/8740363>. llvm-svn: 121373
32 lines
549 B
C++
32 lines
549 B
C++
// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s
|
|
// CHECK: ; ModuleID
|
|
|
|
struct A {
|
|
inline void f();
|
|
};
|
|
|
|
// CHECK-NOT: define void @_ZN1A1fEv
|
|
void A::f() { }
|
|
|
|
template<typename> struct B { };
|
|
|
|
template<> struct B<char> {
|
|
inline void f();
|
|
};
|
|
|
|
// CHECK-NOT: _ZN1BIcE1fEv
|
|
void B<char>::f() { }
|
|
|
|
// We need a final CHECK line here.
|
|
|
|
// CHECK: define void @_Z1fv
|
|
void f() { }
|
|
|
|
// <rdar://problem/8740363>
|
|
inline void f1(int);
|
|
|
|
// CHECK: define linkonce_odr void @_Z2f1i
|
|
void f1(int) { }
|
|
|
|
void test_f1() { f1(17); }
|