diff options
Diffstat (limited to 'clang/test/CodeGenCXX/linkage.cpp')
-rw-r--r-- | clang/test/CodeGenCXX/linkage.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/linkage.cpp b/clang/test/CodeGenCXX/linkage.cpp index ce93161cad5..c803a941614 100644 --- a/clang/test/CodeGenCXX/linkage.cpp +++ b/clang/test/CodeGenCXX/linkage.cpp @@ -103,3 +103,43 @@ namespace test8 { } void *h() { return g(); } } + +namespace test9 { + // CHECK-DAG: define linkonce_odr void @_ZN5test91fIPZNS_1gEvE1S_5EEvT_( + template <typename T> void f(T) {} + inline void *g() { + struct S { + } s; + return reinterpret_cast<void *>(f<S*>); + } + void *h() { return g(); } +} + +namespace test10 { + // CHECK-DAG: define linkonce_odr void @_ZN6test101fIPFZNS_1gEvE1S_6vEEEvT_( + template <typename T> void f(T) {} + inline void *g() { + struct S { + } s; + typedef S(*ftype)(); + return reinterpret_cast<void *>(f<ftype>); + } + void *h() { return g(); } +} + +namespace test11 { + // CHECK-DAG: define internal void @_ZN6test111fIPFZNS_1gEvE1S_7PNS_12_GLOBAL__N_11IEEEEvT_( + namespace { + struct I { + }; + } + + template <typename T> void f(T) {} + inline void *g() { + struct S { + }; + typedef S(*ftype)(I * x); + return reinterpret_cast<void *>(f<ftype>); + } + void *h() { return g(); } +} |