diff options
Diffstat (limited to 'lib/Sema')
-rw-r--r-- | lib/Sema/Sema.h | 2 | ||||
-rw-r--r-- | lib/Sema/SemaExpr.cpp | 5 | ||||
-rw-r--r-- | lib/Sema/SemaTemplate.cpp | 10 |
3 files changed, 11 insertions, 6 deletions
diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h index 25f2164ed0..68e0ce8f7d 100644 --- a/lib/Sema/Sema.h +++ b/lib/Sema/Sema.h @@ -1036,6 +1036,8 @@ public: bool DiagnoseUseOfDecl(NamedDecl *D, SourceLocation Loc); // Primary Expressions. + virtual SourceRange getExprRange(ExprTy *E) const; + virtual OwningExprResult ActOnIdentifierExpr(Scope *S, SourceLocation Loc, IdentifierInfo &II, bool HasTrailingLParen, diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 1f8cb80cd3..eec27cee83 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -110,6 +110,11 @@ bool Sema::DiagnoseUseOfDecl(NamedDecl *D, SourceLocation Loc) { return false; } +SourceRange Sema::getExprRange(ExprTy *E) const { + Expr *Ex = (Expr *)E; + return Ex? Ex->getSourceRange() : SourceRange(); +} + //===----------------------------------------------------------------------===// // Standard Promotions and Conversions //===----------------------------------------------------------------------===// diff --git a/lib/Sema/SemaTemplate.cpp b/lib/Sema/SemaTemplate.cpp index 0c60520142..f69f546177 100644 --- a/lib/Sema/SemaTemplate.cpp +++ b/lib/Sema/SemaTemplate.cpp @@ -1615,12 +1615,10 @@ Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagKind TK, // FIXME: Once we have member templates, we'll need to check // C++ [temp.expl.spec]p17-18, where we could have multiple levels of // template<> headers. - if (TemplateParameterLists.size() == 0) { - // FIXME: It would be very nifty if we could introduce some kind - // of "code insertion hint" that could show the code that needs to - // be added. - Diag(KWLoc, diag::err_template_spec_needs_header); - } else { + if (TemplateParameterLists.size() == 0) + Diag(KWLoc, diag::err_template_spec_needs_header) + << CodeInsertionHint(KWLoc, "template<> "); + else { TemplateParameterList *TemplateParams = static_cast<TemplateParameterList*>(*TemplateParameterLists.get()); if (TemplateParameterLists.size() > 1) { |