Don't use magic constants in the digraph diagnostic
authorAlp Toker <alp@nuanti.com>
Mon, 6 Jan 2014 12:54:32 +0000 (12:54 +0000)
committerAlp Toker <alp@nuanti.com>
Mon, 6 Jan 2014 12:54:32 +0000 (12:54 +0000)
llvm-svn: 198605

clang/include/clang/Basic/DiagnosticParseKinds.td
clang/lib/Parse/ParseExprCXX.cpp

index 4844677..7e92729 100644 (file)
@@ -641,9 +641,7 @@ def err_ctor_init_missing_comma : Error<
 def err_friend_decl_defines_type : Error<
   "cannot define a type in a friend declaration">;
 def err_missing_whitespace_digraph : Error<
-  "found '<::' after a "
-  "%select{template name|const_cast|dynamic_cast|reinterpret_cast|static_cast}0"
-  " which forms the digraph '<:' (aka '[') and a ':', did you mean '< ::'?">;
+  "found '<::' after a %0 which forms the digraph '<:' (aka '[') and a ':', did you mean '< ::'?">;
 
 def ext_deleted_function : ExtWarn<
   "deleted function definitions are a C++11 extension">, InGroup<CXX11>;
index 42e7370..f5d5454 100644 (file)
 
 using namespace clang;
 
-static int SelectDigraphErrorMessage(tok::TokenKind Kind) {
-  switch (Kind) {
-    case tok::kw_template:         return 0;
-    case tok::kw_const_cast:       return 1;
-    case tok::kw_dynamic_cast:     return 2;
-    case tok::kw_reinterpret_cast: return 3;
-    case tok::kw_static_cast:      return 4;
-    default:
-      llvm_unreachable("Unknown type for digraph error message.");
-  }
-}
-
 // Are the two tokens adjacent in the same source file?
 bool Parser::areTokensAdjacent(const Token &First, const Token &Second) {
   SourceManager &SM = PP.getSourceManager();
@@ -56,8 +44,7 @@ static void FixDigraph(Parser &P, Preprocessor &PP, Token &DigraphToken,
   Range.setBegin(DigraphToken.getLocation());
   Range.setEnd(ColonToken.getLocation());
   P.Diag(DigraphToken.getLocation(), diag::err_missing_whitespace_digraph)
-      << SelectDigraphErrorMessage(Kind)
-      << FixItHint::CreateReplacement(Range, "< ::");
+      << Kind << FixItHint::CreateReplacement(Range, "< ::");
 
   // Update token information to reflect their change in token type.
   ColonToken.setKind(tok::coloncolon);
@@ -93,8 +80,8 @@ void Parser::CheckForTemplateAndDigraph(Token &Next, ParsedType ObjectType,
                               Template, MemberOfUnknownSpecialization))
     return;
 
-  FixDigraph(*this, PP, Next, SecondToken, tok::kw_template,
-             /*AtDigraph*/false);
+  FixDigraph(*this, PP, Next, SecondToken, tok::annot_template_id,
+             /*AtDigraph*/ false);
 }
 
 /// \brief Emits an error for a left parentheses after a double colon.