llvm-project/clang/test/CodeGenCXX/inline-functions.cpp
John McCall 357d0f3caf Set the "implicitly inline" bit on a method as soon as we see a definition
within the class.  Teach IR gen to look for function definitions in record
lexical contexts when deciding whether to emit a function whose address    
was taken.  Fixes PR8789.

llvm-svn: 121833
2010-12-15 04:00:32 +00:00

56 lines
878 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); }
// PR8789
namespace test1 {
template <typename T> class ClassTemplate {
private:
friend void T::func();
void g() {}
};
// CHECK: define linkonce_odr void @_ZN5test11C4funcEv(
class C {
public:
void func() {
ClassTemplate<C> ct;
ct.g();
}
};
void f() {
C c;
c.func();
}
}