summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-05-18 00:33:28 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-05-18 00:33:28 +0000
commitb6ed153155d6fd961b5403a094598f366c581302 (patch)
tree15ff456efdecd3d861eb88912bc76a4a0b4e6c15
parente858e960c2ab01376488bff2e837a05093ef23cc (diff)
downloadbcm5719-llvm-b6ed153155d6fd961b5403a094598f366c581302.tar.gz
bcm5719-llvm-b6ed153155d6fd961b5403a094598f366c581302.zip
Handle local enum types too.
Thanks to John McCall for pointing this out. llvm-svn: 182182
-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