diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2013-12-04 00:28:23 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2013-12-04 00:28:23 +0000 |
commit | 72bfbd8615e9cf8d5a0557ab44f3188062e23e62 (patch) | |
tree | a38114d573b6274d375ad59e6301c58634206f88 /clang/lib/Sema/SemaCXXScopeSpec.cpp | |
parent | f389e5c0936335c9c5979ae0707378ccafde9cfc (diff) | |
download | bcm5719-llvm-72bfbd8615e9cf8d5a0557ab44f3188062e23e62.tar.gz bcm5719-llvm-72bfbd8615e9cf8d5a0557ab44f3188062e23e62.zip |
Fix several crash-on-invalids when using template-ids that aren't
simple-template-ids (eg, 'operator+<int>') in weird places.
llvm-svn: 196333
Diffstat (limited to 'clang/lib/Sema/SemaCXXScopeSpec.cpp')
-rw-r--r-- | clang/lib/Sema/SemaCXXScopeSpec.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/clang/lib/Sema/SemaCXXScopeSpec.cpp b/clang/lib/Sema/SemaCXXScopeSpec.cpp index 674411ec062..13c9993bf4c 100644 --- a/clang/lib/Sema/SemaCXXScopeSpec.cpp +++ b/clang/lib/Sema/SemaCXXScopeSpec.cpp @@ -747,7 +747,8 @@ bool Sema::ActOnCXXNestedNameSpecifier(Scope *S, TemplateArgumentListInfo TemplateArgs(LAngleLoc, RAngleLoc); translateTemplateArguments(TemplateArgsIn, TemplateArgs); - if (DependentTemplateName *DTN = Template.get().getAsDependentTemplateName()){ + DependentTemplateName *DTN = Template.get().getAsDependentTemplateName(); + if (DTN && DTN->isIdentifier()) { // Handle a dependent template specialization for which we cannot resolve // the template name. assert(DTN->getQualifier() == SS.getScopeRep()); @@ -773,20 +774,20 @@ bool Sema::ActOnCXXNestedNameSpecifier(Scope *S, CCLoc); return false; } - - - if (Template.get().getAsOverloadedTemplate() || + + // FIXME: Variable templates + if (Template.get().getAsOverloadedTemplate() || DTN || isa<FunctionTemplateDecl>(Template.get().getAsTemplateDecl())) { SourceRange R(TemplateNameLoc, RAngleLoc); if (SS.getRange().isValid()) R.setBegin(SS.getRange().getBegin()); - + Diag(CCLoc, diag::err_non_type_template_in_nested_name_specifier) << Template.get() << R; NoteAllFoundTemplates(Template.get()); return true; } - + // We were able to resolve the template name to an actual template. // Build an appropriate nested-name-specifier. QualType T = CheckTemplateIdType(Template.get(), TemplateNameLoc, |