diff options
author | David Majnemer <david.majnemer@gmail.com> | 2013-08-16 08:29:13 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2013-08-16 08:29:13 +0000 |
commit | f0a84f200aa656db50da5558d3b140ad3649bb5a (patch) | |
tree | 669ef71c4e731fa598bf620e69a33e414688cf65 /clang/lib | |
parent | 0803598b9bf569217dc49ce60739b9e56f9f295d (diff) | |
download | bcm5719-llvm-f0a84f200aa656db50da5558d3b140ad3649bb5a.tar.gz bcm5719-llvm-f0a84f200aa656db50da5558d3b140ad3649bb5a.zip |
Parse: Do not 'HandleTopLevelDecl' on templated functions.
Summary:
HandleTopLevelDecl on a templated function leads us to try and mangle
it.
Reviewers: rsmith
Reviewed By: rsmith
CC: cfe-commits
Differential Revision: http://llvm-reviews.chandlerc.com/D1412
llvm-svn: 188536
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/AST/MicrosoftMangle.cpp | 10 | ||||
-rw-r--r-- | clang/lib/Parse/ParseTemplate.cpp | 6 | ||||
-rw-r--r-- | clang/lib/Sema/SemaTemplateInstantiateDecl.cpp | 2 |
3 files changed, 5 insertions, 13 deletions
diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp index 714f3fc5677..122816cb0c2 100644 --- a/clang/lib/AST/MicrosoftMangle.cpp +++ b/clang/lib/AST/MicrosoftMangle.cpp @@ -1721,13 +1721,9 @@ void MicrosoftCXXNameMangler::mangleType(const BlockPointerType *T, mangleFunctionType(pointee->castAs<FunctionProtoType>(), NULL, false, false); } -void MicrosoftCXXNameMangler::mangleType(const InjectedClassNameType *T, - SourceRange Range) { - DiagnosticsEngine &Diags = Context.getDiags(); - unsigned DiagID = Diags.getCustomDiagID(DiagnosticsEngine::Error, - "cannot mangle this injected class name type yet"); - Diags.Report(Range.getBegin(), DiagID) - << Range; +void MicrosoftCXXNameMangler::mangleType(const InjectedClassNameType *, + SourceRange) { + llvm_unreachable("Cannot mangle injected class name type."); } void MicrosoftCXXNameMangler::mangleType(const TemplateSpecializationType *T, diff --git a/clang/lib/Parse/ParseTemplate.cpp b/clang/lib/Parse/ParseTemplate.cpp index 5ab5cec0289..b050a06092a 100644 --- a/clang/lib/Parse/ParseTemplate.cpp +++ b/clang/lib/Parse/ParseTemplate.cpp @@ -1249,7 +1249,7 @@ void Parser::LateTemplateParserCallback(void *P, LateParsedTemplate &LPT) { /// \brief Late parse a C++ function template in Microsoft mode. void Parser::ParseLateTemplatedFuncDef(LateParsedTemplate &LPT) { - if(!LPT.D) + if (!LPT.D) return; // Get the FunctionDecl. @@ -1352,10 +1352,6 @@ void Parser::ParseLateTemplatedFuncDef(LateParsedTemplate &LPT) { TemplateParamScopeStack.rbegin(); for (; I != TemplateParamScopeStack.rend(); ++I) delete *I; - - DeclGroupPtrTy grp = Actions.ConvertDeclToDeclGroup(LPT.D); - if (grp) - Actions.getASTConsumer().HandleTopLevelDecl(grp.get()); } /// \brief Lex a delayed template function for late parsing. diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp index 3cb20c79af5..b53c197d526 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -3115,7 +3115,7 @@ void Sema::InstantiateFunctionDefinition(SourceLocation PointOfInstantiation, return; } - // Call the LateTemplateParser callback if there a need to late parse + // Call the LateTemplateParser callback if there is a need to late parse // a templated function definition. if (!Pattern && PatternDecl->isLateTemplateParsed() && LateTemplateParser) { |