summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/AST/Decl.cpp7
-rw-r--r--clang/test/CodeGenCXX/linkage.cpp11
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(); }
+}
OpenPOWER on IntegriCloud