[ODRHash] Supply more information when generic error message is emitted.
authorRichard Trieu <rtrieu@google.com>
Wed, 21 Jun 2017 01:43:13 +0000 (01:43 +0000)
committerRichard Trieu <rtrieu@google.com>
Wed, 21 Jun 2017 01:43:13 +0000 (01:43 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@305872 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticSerializationKinds.td
lib/Serialization/ASTReader.cpp

index 0a59a633232cc1e464b5f54efdfe928b006889a6..3c64ebb9c7f4e2177ad28f1927d73490f2f0d362 100644 (file)
@@ -112,8 +112,13 @@ def note_module_odr_violation_possible_decl : Note<
 def err_module_odr_violation_different_definitions : Error<
   "%q0 has different definitions in different modules; "
   "%select{definition in module '%2' is here|defined here}1">;
+def note_first_module_difference : Note<
+  "in first definition, possible difference is here">;
 def note_module_odr_violation_different_definitions : Note<
   "definition in module '%0' is here">;
+def note_second_module_difference : Note<
+  "in second definition, possible difference is here">;
+
 def err_module_odr_violation_different_instantiations : Error<
   "instantiation of %q0 is different in different modules">;
 
index eeb0132c1690043d5e875e45bc2b118483e084fa..d033a9b32c0fdddf4871c34b68f9070575f1fb77 100644 (file)
@@ -9324,9 +9324,20 @@ void ASTReader::diagnoseOdrViolations() {
              diag::err_module_odr_violation_different_definitions)
             << FirstRecord << FirstModule.empty() << FirstModule;
 
+        if (FirstDecl) {
+          Diag(FirstDecl->getLocation(), diag::note_first_module_difference)
+              << FirstRecord << FirstDecl->getSourceRange();
+        }
+
         Diag(SecondRecord->getLocation(),
              diag::note_module_odr_violation_different_definitions)
             << SecondModule;
+
+        if (SecondDecl) {
+          Diag(SecondDecl->getLocation(), diag::note_second_module_difference)
+              << SecondDecl->getSourceRange();
+        }
+
         Diagnosed = true;
         break;
       }