From ca370b0d1f0ff4ca2bc55bf30052f6c81c8b0609 Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Mon, 18 Mar 2013 22:23:49 +0000 Subject: [PATCH] [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 --- clang/lib/Serialization/ASTWriterDecl.cpp | 1 + clang/test/PCH/cxx-templates.h | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/clang/lib/Serialization/ASTWriterDecl.cpp b/clang/lib/Serialization/ASTWriterDecl.cpp index 6c63a14..d8b5b91 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 3dda059..00631ddb 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 +void f() { + enum E { + enumerator + }; + + T t = enumerator; +} + +template void f(); +} -- 2.7.4