diff options
-rw-r--r-- | clang/lib/AST/Decl.cpp | 7 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/linkage.cpp | 11 |
2 files changed, 13 insertions, 5 deletions
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp index cbd55889c9e..8a523d6a0de 100644 --- a/clang/lib/AST/Decl.cpp +++ b/clang/lib/AST/Decl.cpp @@ -298,11 +298,8 @@ static LinkageInfo getLIForTemplateTypeArgument(QualType T) { if (!TT) return LI; - const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(TT->getDecl()); - if (!RD) - return LI; - - const FunctionDecl *FD = getOutermostFunctionContext(RD); + const Decl *D = TT->getDecl(); + const FunctionDecl *FD = getOutermostFunctionContext(D); if (!FD) return LI; diff --git a/clang/test/CodeGenCXX/linkage.cpp b/clang/test/CodeGenCXX/linkage.cpp index 732c3cfcc41..ce93161cad5 100644 --- a/clang/test/CodeGenCXX/linkage.cpp +++ b/clang/test/CodeGenCXX/linkage.cpp @@ -92,3 +92,14 @@ namespace test7 { void *h() { return g(); } } + +namespace test8 { + // CHECK-DAG: define linkonce_odr void @_ZN5test81fIZNS_1gEvE1SEEvT_( + template <typename T> void f(T) {} + inline void *g() { + enum S { + }; + return reinterpret_cast<void *>(f<S>); + } + void *h() { return g(); } +} |