make the 'to match this' diagnostic a note.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59921 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/clang/Basic/DiagnosticKinds.def b/include/clang/Basic/DiagnosticKinds.def
index c3000f1..45b0535 100644
--- a/include/clang/Basic/DiagnosticKinds.def
+++ b/include/clang/Basic/DiagnosticKinds.def
@@ -37,6 +37,11 @@
 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_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/lib/Lex/PPExpressions.cpp b/lib/Lex/PPExpressions.cpp
index 3eedf8c..168c9d0 100644
--- a/lib/Lex/PPExpressions.cpp
+++ b/lib/Lex/PPExpressions.cpp
@@ -137,7 +137,7 @@
     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 @@
       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 @@
       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/lib/Parse/ParseExpr.cpp b/lib/Parse/ParseExpr.cpp
index 21b3dac..a379eec 100644
--- a/lib/Parse/ParseExpr.cpp
+++ b/lib/Parse/ParseExpr.cpp
@@ -271,7 +271,7 @@
       
       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/lib/Parse/ParseExprCXX.cpp b/lib/Parse/ParseExprCXX.cpp
index 9eb2431..527aba2 100644
--- a/lib/Parse/ParseExprCXX.cpp
+++ b/lib/Parse/ParseExprCXX.cpp
@@ -199,7 +199,7 @@
   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/lib/Parse/ParseStmt.cpp b/lib/Parse/ParseStmt.cpp
index 221ad90..7006241 100644
--- a/lib/Parse/ParseStmt.cpp
+++ b/lib/Parse/ParseStmt.cpp
@@ -733,7 +733,7 @@
     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/lib/Parse/Parser.cpp b/lib/Parse/Parser.cpp
index ae75266..4e27e71 100644
--- a/lib/Parse/Parser.cpp
+++ b/lib/Parse/Parser.cpp
@@ -71,7 +71,7 @@
   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/test/Parser/recovery-1.c b/test/Parser/recovery-1.c
index d70cdab..fa7892d 100644
--- a/test/Parser/recovery-1.c
+++ b/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/test/Parser/typeof.c b/test/Parser/typeof.c
index 3ea2775..1cf04ba 100644
--- a/test/Parser/typeof.c
+++ b/test/Parser/typeof.c
@@ -11,7 +11,7 @@
   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/test/Sema/invalid-struct-init.c b/test/Sema/invalid-struct-init.c
index a3dc687..fb96592 100644
--- a/test/Sema/invalid-struct-init.c
+++ b/test/Sema/invalid-struct-init.c
@@ -15,7 +15,7 @@
 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/test/SemaCXX/nested-name-spec.cpp b/test/SemaCXX/nested-name-spec.cpp
index 8e7e17a..b6032e6 100644
--- a/test/SemaCXX/nested-name-spec.cpp
+++ b/test/SemaCXX/nested-name-spec.cpp
@@ -72,4 +72,4 @@
 }
 
 // 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/test/SemaCXX/new-delete.cpp b/test/SemaCXX/new-delete.cpp
index 449fcee..60f77e4 100644
--- a/test/SemaCXX/new-delete.cpp
+++ b/test/SemaCXX/new-delete.cpp
@@ -50,7 +50,7 @@
 {
   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/test/SemaObjC/invalid-typename.m b/test/SemaObjC/invalid-typename.m
index 9996789..e4a5b4e 100644
--- a/test/SemaObjC/invalid-typename.m
+++ b/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/test/SemaObjC/property-9.m b/test/SemaObjC/property-9.m
index 03c2ba0..9275b51 100644
--- a/test/SemaObjC/property-9.m
+++ b/test/SemaObjC/property-9.m
@@ -50,14 +50,16 @@
 
 
 // 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/test/SemaObjC/protocol-archane.m b/test/SemaObjC/protocol-archane.m
index 19736cd..67e1c23 100644
--- a/test/SemaObjC/protocol-archane.m
+++ b/test/SemaObjC/protocol-archane.m
@@ -6,7 +6,7 @@
 @end
 
 void foo(id x) {
-  bar((short<SomeProtocol>)x); // expected-error {{expected ')'}} expected-error {{to match this '('}}
+  bar((short<SomeProtocol>)x); // expected-error {{expected ')'}} expected-note {{to match this '('}}
   bar((<SomeProtocol>)x);      // expected-warning {{protocol qualifiers without 'id' is archaic}}
 
   [(<SomeProtocol>)x bar];      // expected-warning {{protocol qualifiers without 'id' is archaic}}