diff --git a/clang/include/clang/Basic/DiagnosticKinds.def b/clang/include/clang/Basic/DiagnosticKinds.def index c3000f19bd5a..45b0535dec19 100644 --- a/clang/include/clang/Basic/DiagnosticKinds.def +++ b/clang/include/clang/Basic/DiagnosticKinds.def @@ -37,6 +37,11 @@ DIAG(note_previous_use, NOTE, DIAG(note_duplicate_case_prev, NOTE, "previous case defined here") +/// note_matching - this is used as a continuation of a previous diagnostic, +/// e.g. to specify the '(' when we expected a ')'. +DIAG(note_matching, NOTE, + "to match this '%0'") + //===----------------------------------------------------------------------===// // Lexer Diagnostics @@ -409,13 +414,6 @@ DIAG(err_expected_selector_for_method, ERROR, DIAG(err_unexpected_at, ERROR, "unexpected '@' in program") -/// err_matching - this is used as a continuation of a previous error, e.g. to -/// specify the '(' when we expected a ')'. This should probably be some -/// special sort of diagnostic kind to indicate that it is the second half of -/// the previous diagnostic. -DIAG(err_matching, ERROR, - "to match this '%0'") - /// Objective-C parser diagnostics DIAG(err_unexpected_interface, ERROR, "unexpected interface name '%0': expected expression") diff --git a/clang/lib/Lex/PPExpressions.cpp b/clang/lib/Lex/PPExpressions.cpp index 3eedf8cd98b5..168c9d08adfe 100644 --- a/clang/lib/Lex/PPExpressions.cpp +++ b/clang/lib/Lex/PPExpressions.cpp @@ -137,7 +137,7 @@ static bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, if (LParenLoc.isValid()) { if (PeekTok.isNot(tok::r_paren)) { PP.Diag(PeekTok.getLocation(), diag::err_pp_missing_rparen); - PP.Diag(LParenLoc, diag::err_matching) << "("; + PP.Diag(LParenLoc, diag::note_matching) << "("; return true; } // Consume the ). @@ -261,7 +261,7 @@ static bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, if (PeekTok.isNot(tok::r_paren)) { PP.Diag(PeekTok.getLocation(), diag::err_pp_expected_rparen) << Result.getRange(); - PP.Diag(Start, diag::err_matching) << "("; + PP.Diag(Start, diag::note_matching) << "("; return true; } DT.State = DefinedTracker::Unknown; @@ -606,7 +606,7 @@ static bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, if (PeekTok.isNot(tok::colon)) { PP.Diag(PeekTok.getLocation(), diag::err_expected_colon) << LHS.getRange(), RHS.getRange(); - PP.Diag(OpLoc, diag::err_matching) << "?"; + PP.Diag(OpLoc, diag::note_matching) << "?"; return true; } // Consume the :. diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp index 21b3dac038f4..a379eeca2ee2 100644 --- a/clang/lib/Parse/ParseExpr.cpp +++ b/clang/lib/Parse/ParseExpr.cpp @@ -271,7 +271,7 @@ Parser::ParseRHSOfBinaryExpression(ExprResult LHS, unsigned MinPrec) { if (Tok.isNot(tok::colon)) { Diag(Tok, diag::err_expected_colon); - Diag(OpToken, diag::err_matching) << "?"; + Diag(OpToken, diag::note_matching) << "?"; Actions.DeleteExpr(LHS.Val); Actions.DeleteExpr(TernaryMiddle.Val); return ExprResult(true); diff --git a/clang/lib/Parse/ParseExprCXX.cpp b/clang/lib/Parse/ParseExprCXX.cpp index 9eb2431642a2..527aba202080 100644 --- a/clang/lib/Parse/ParseExprCXX.cpp +++ b/clang/lib/Parse/ParseExprCXX.cpp @@ -199,7 +199,7 @@ Parser::ExprResult Parser::ParseCXXCasts() { SourceLocation RAngleBracketLoc = Tok.getLocation(); if (ExpectAndConsume(tok::greater, diag::err_expected_greater)) - return Diag(LAngleBracketLoc, diag::err_matching) << "<"; + return Diag(LAngleBracketLoc, diag::note_matching) << "<"; SourceLocation LParenLoc = Tok.getLocation(), RParenLoc; diff --git a/clang/lib/Parse/ParseStmt.cpp b/clang/lib/Parse/ParseStmt.cpp index 221ad90273dd..70062416fb31 100644 --- a/clang/lib/Parse/ParseStmt.cpp +++ b/clang/lib/Parse/ParseStmt.cpp @@ -733,7 +733,7 @@ Parser::StmtResult Parser::ParseDoStatement() { ExitScope(); if (!Body.isInvalid) { Diag(Tok, diag::err_expected_while); - Diag(DoLoc, diag::err_matching) << "do"; + Diag(DoLoc, diag::note_matching) << "do"; SkipUntil(tok::semi, false, true); } return true; diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp index ae75266e0411..4e27e718f871 100644 --- a/clang/lib/Parse/Parser.cpp +++ b/clang/lib/Parse/Parser.cpp @@ -71,7 +71,7 @@ SourceLocation Parser::MatchRHSPunctuation(tok::TokenKind RHSTok, case tok::greater: LHSName = "<"; DID = diag::err_expected_greater; break; } Diag(Tok, DID); - Diag(LHSLoc, diag::err_matching) << LHSName; + Diag(LHSLoc, diag::note_matching) << LHSName; SkipUntil(RHSTok); return R; } diff --git a/clang/test/Parser/recovery-1.c b/clang/test/Parser/recovery-1.c index d70cdab364a1..fa7892db2c00 100644 --- a/clang/test/Parser/recovery-1.c +++ b/clang/test/Parser/recovery-1.c @@ -1,7 +1,7 @@ // RUN: clang -fsyntax-only -fno-caret-diagnostics -pedantic %s 2>&1 | grep warning | wc -l | grep 1 && // RUN: clang -fsyntax-only -verify -pedantic %s -char (((( /* expected-error {{to match this '('}} */ +char (((( /* expected-note {{to match this '('}} */ *X x ] )))); /* expected-error {{expected ')'}} */ ; // expected-warning {{ISO C does not allow an extra ';' outside of a function}} diff --git a/clang/test/Parser/typeof.c b/clang/test/Parser/typeof.c index 3ea277559e0a..1cf04baefd0d 100644 --- a/clang/test/Parser/typeof.c +++ b/clang/test/Parser/typeof.c @@ -11,7 +11,7 @@ static void test() { typeof(TInt) anInt; short TInt eee; // expected-error{{parse error}} void ary[7] fff; // expected-error{{array has incomplete element type 'void'}} expected-error{{parse error}} - typeof(void ary[7]) anIntError; // expected-error{{expected ')'}} expected-error{{to match this '('}} + typeof(void ary[7]) anIntError; // expected-error{{expected ')'}} expected-note {{to match this '('}} typeof(const int) aci; const typeof (*pi) aConstInt; int xx; diff --git a/clang/test/Sema/invalid-struct-init.c b/clang/test/Sema/invalid-struct-init.c index a3dc687acb7c..fb9659269439 100644 --- a/clang/test/Sema/invalid-struct-init.c +++ b/clang/test/Sema/invalid-struct-init.c @@ -15,7 +15,7 @@ static void zm_info_pcre(zend_module_entry *zend_module ) { } static int zm_startup_pcre(int type, int module_number ) { } static int zm_shutdown_pcre(int type, int module_number ) { - zend_function_entry pcre_functions[] = {{ }; // expected-error{{expected '}'}} expected-error{{to match this '{'}} + zend_function_entry pcre_functions[] = {{ }; // expected-error{{expected '}'}} expected-note {{to match this '{'}} zend_module_entry pcre_module_entry = { sizeof(zend_module_entry), 20071006, 0, 0, ((void *)0), ((void *)0), "pcre", pcre_functions, zm_startup_pcre, zm_shutdown_pcre, ((void *)0), diff --git a/clang/test/SemaCXX/nested-name-spec.cpp b/clang/test/SemaCXX/nested-name-spec.cpp index 8e7e17af9d99..b6032e649467 100644 --- a/clang/test/SemaCXX/nested-name-spec.cpp +++ b/clang/test/SemaCXX/nested-name-spec.cpp @@ -72,4 +72,4 @@ void f3() { } // make sure the following doesn't hit any asserts -void f4(undef::C); // expected-error {{use of undeclared identifier 'undef'}} // expected-error {{expected ')'}} expected-error {{to match this '('}} // expected-error {{variable has incomplete type 'void'}} +void f4(undef::C); // expected-error {{use of undeclared identifier 'undef'}} // expected-error {{expected ')'}} expected-note {{to match this '('}} // expected-error {{variable has incomplete type 'void'}} diff --git a/clang/test/SemaCXX/new-delete.cpp b/clang/test/SemaCXX/new-delete.cpp index 449fcee64897..60f77e4ef911 100644 --- a/clang/test/SemaCXX/new-delete.cpp +++ b/clang/test/SemaCXX/new-delete.cpp @@ -50,7 +50,7 @@ void bad_deletes() { delete 0; // expected-error {{cannot delete expression of type 'int'}} delete [0] (int*)0; // expected-error {{expected ']'}} \ - // expected-error {{to match this '['}} + // expected-note {{to match this '['}} delete (void*)0; // expected-error {{cannot delete expression}} delete (T*)0; // expected-warning {{deleting pointer to incomplete type}} } diff --git a/clang/test/SemaObjC/invalid-typename.m b/clang/test/SemaObjC/invalid-typename.m index 9996789e2129..e4a5b4e600dd 100644 --- a/clang/test/SemaObjC/invalid-typename.m +++ b/clang/test/SemaObjC/invalid-typename.m @@ -7,6 +7,6 @@ canBeginSyncingPlanWithId:(bycopy NSString *)planId syncModes:(bycopy NSArray /* ISDSyncState */ *)syncModes entities:(bycopy NSArray /* ISDEntity */ *)entities - truthPullers:(bycopy NSDictionary /* NSString -> [NSString] */ *)truthPullers; // expected-error{{expected ')'}} expected-error{{to match this '('}} + truthPullers:(bycopy NSDictionary /* NSString -> [NSString] */ *)truthPullers; // expected-error{{expected ')'}} expected-note {{to match this '('}} @end diff --git a/clang/test/SemaObjC/property-9.m b/clang/test/SemaObjC/property-9.m index 03c2ba05ae74..9275b51d25b5 100644 --- a/clang/test/SemaObjC/property-9.m +++ b/clang/test/SemaObjC/property-9.m @@ -50,14 +50,16 @@ typedef signed char BOOL; // test parser recovery: rdar://6254579 -@property (readonly getter=isAwesome) // expected-error {{error: expected ')'}} \ - // expected-error {{to match this '('}} +@property ( // expected-note {{to match this '('}} + readonly getter=isAwesome) // expected-error {{error: expected ')'}} + int _awesome; @property (readonlyx) // expected-error {{unknown property attribute 'readonlyx'}} int _awesome2; -@property (+) // expected-error {{error: expected ')'}} \ - // expected-error {{to match this '('}} +@property ( // expected-note {{to match this '('}} + +) // expected-error {{error: expected ')'}} + int _awesome3; @end diff --git a/clang/test/SemaObjC/protocol-archane.m b/clang/test/SemaObjC/protocol-archane.m index 19736cdf5054..67e1c231f681 100644 --- a/clang/test/SemaObjC/protocol-archane.m +++ b/clang/test/SemaObjC/protocol-archane.m @@ -6,7 +6,7 @@ @end void foo(id x) { - bar((short)x); // expected-error {{expected ')'}} expected-error {{to match this '('}} + bar((short)x); // expected-error {{expected ')'}} expected-note {{to match this '('}} bar(()x); // expected-warning {{protocol qualifiers without 'id' is archaic}} [()x bar]; // expected-warning {{protocol qualifiers without 'id' is archaic}}