summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2013-03-18 22:23:49 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2013-03-18 22:23:49 +0000
commitca370b0d1f0ff4ca2bc55bf30052f6c81c8b0609 (patch)
tree867ece2a6a3df59e5466fdfa0ddd8e0f1b510f7f
parent7ee730414dc1f449e3de059f70a3d8a7fd1ea5fb (diff)
downloadbcm5719-llvm-ca370b0d1f0ff4ca2bc55bf30052f6c81c8b0609.tar.gz
bcm5719-llvm-ca370b0d1f0ff4ca2bc55bf30052f6c81c8b0609.zip
[PCH] Fix assertion hit related to enum decls inside templated funtions.
Report and suggested fix by Tom Honermann! http://llvm.org/bugs/show_bug.cgi?id=13020 llvm-svn: 177330
-rw-r--r--clang/lib/Serialization/ASTWriterDecl.cpp1
-rw-r--r--clang/test/PCH/cxx-templates.h13
2 files changed, 14 insertions, 0 deletions
diff --git a/clang/lib/Serialization/ASTWriterDecl.cpp b/clang/lib/Serialization/ASTWriterDecl.cpp
index 6c63a149c2b..d8b5b911084 100644
--- a/clang/lib/Serialization/ASTWriterDecl.cpp
+++ b/clang/lib/Serialization/ASTWriterDecl.cpp
@@ -253,6 +253,7 @@ void ASTDeclWriter::VisitEnumDecl(EnumDecl *D) {
!D->isModulePrivate() &&
!CXXRecordDecl::classofKind(D->getKind()) &&
!D->getIntegerTypeSourceInfo() &&
+ !D->getMemberSpecializationInfo() &&
D->getDeclName().getNameKind() == DeclarationName::Identifier)
AbbrevToUse = Writer.getDeclEnumAbbrev();
diff --git a/clang/test/PCH/cxx-templates.h b/clang/test/PCH/cxx-templates.h
index 3dda0590264..00631ddbfb9 100644
--- a/clang/test/PCH/cxx-templates.h
+++ b/clang/test/PCH/cxx-templates.h
@@ -246,3 +246,16 @@ struct __mt_alloc {
}
};
}
+
+namespace PR13020 {
+template<typename T>
+void f() {
+ enum E {
+ enumerator
+ };
+
+ T t = enumerator;
+}
+
+template void f<int>();
+}
OpenPOWER on IntegriCloud