<div dir="ltr">r299989 should prevent the build breakages.  I have recommited my changes in r300001.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Mar 26, 2017 at 2:39 PM, Vassil Vassilev via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: vvassilev<br>
Date: Sun Mar 26 16:39:16 2017<br>
New Revision: 298824<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=298824&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=298824&view=rev</a><br>
Log:<br>
Revert r298742 "[ODRHash] Add error messages for mismatched parameters in methods."<br>
<br>
I failed to revert this in r298816.<br>
<br>
Modified:<br>
    cfe/trunk/include/clang/Basic/<wbr>DiagnosticSerializationKinds.<wbr>td<br>
    cfe/trunk/lib/AST/ODRHash.cpp<br>
    cfe/trunk/lib/Serialization/<wbr>ASTReader.cpp<br>
    cfe/trunk/test/Modules/odr_<wbr>hash.cpp<br>
<br>
Modified: cfe/trunk/include/clang/Basic/<wbr>DiagnosticSerializationKinds.<wbr>td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSerializationKinds.td?rev=298824&r1=298823&r2=298824&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/include/<wbr>clang/Basic/<wbr>DiagnosticSerializationKinds.<wbr>td?rev=298824&r1=298823&r2=<wbr>298824&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/include/clang/Basic/<wbr>DiagnosticSerializationKinds.<wbr>td (original)<br>
+++ cfe/trunk/include/clang/Basic/<wbr>DiagnosticSerializationKinds.<wbr>td Sun Mar 26 16:39:16 2017<br>
@@ -146,12 +146,7 @@ def err_module_odr_violation_<wbr>mismatch_de<br>
   "method %4 is %select{not static|static}5|"<br>
   "method %4 is %select{not volatile|volatile}5|"<br>
   "method %4 is %select{not const|const}5|"<br>
-  "method %4 is %select{not inline|inline}5|"<br>
-  "method %4 that has %5 parameter%s5|"<br>
-  "method %4 with %ordinal5 parameter of type %6|"<br>
-  "method %4 with %ordinal5 parameter named %6|"<br>
-  "method %4 with %ordinal5 parameter with %select{no |}6default argument|"<br>
-  "method %4 with %ordinal5 parameter with default argument}3">;<br>
+  "method %4 is %select{not inline|inline}5}3">;<br>
<br>
 def note_module_odr_violation_<wbr>mismatch_decl_diff : Note<"but in '%0' found "<br>
   "%select{"<br>
@@ -171,12 +166,7 @@ def note_module_odr_violation_<wbr>mismatch_d<br>
   "method %2 is %select{not static|static}3|"<br>
   "method %2 is %select{not volatile|volatile}3|"<br>
   "method %2 is %select{not const|const}3|"<br>
-  "method %2 is %select{not inline|inline}3|"<br>
-  "method %2 that has %3 parameter%s3|"<br>
-  "method %2 with %ordinal3 parameter of type %4|"<br>
-  "method %2 with %ordinal3 parameter named %4|"<br>
-  "method %2 with %ordinal3 parameter with %select{no |}4default argument|"<br>
-  "method %2 with %ordinal3 parameter with different default argument}1">;<br>
+  "method %2 is %select{not inline|inline}3}1">;<br>
<br>
 def warn_module_uses_date_time : Warning<<br>
   "%select{precompiled header|module}0 uses __DATE__ or __TIME__">,<br>
<br>
Modified: cfe/trunk/lib/AST/ODRHash.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ODRHash.cpp?rev=298824&r1=298823&r2=298824&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/lib/AST/<wbr>ODRHash.cpp?rev=298824&r1=<wbr>298823&r2=298824&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/AST/ODRHash.cpp (original)<br>
+++ cfe/trunk/lib/AST/ODRHash.cpp Sun Mar 26 16:39:16 2017<br>
@@ -169,11 +169,6 @@ public:<br>
     Inherited::VisitValueDecl(D);<br>
   }<br>
<br>
-  void VisitParmVarDecl(const ParmVarDecl *D) {<br>
-    AddStmt(D->getDefaultArg());<br>
-    Inherited::VisitParmVarDecl(D)<wbr>;<br>
-  }<br>
-<br>
   void VisitAccessSpecDecl(const AccessSpecDecl *D) {<br>
     ID.AddInteger(D->getAccess());<br>
     Inherited::<wbr>VisitAccessSpecDecl(D);<br>
@@ -207,12 +202,6 @@ public:<br>
     Hash.AddBoolean(D->isPure());<br>
     Hash.AddBoolean(D-><wbr>isDeletedAsWritten());<br>
<br>
-    ID.AddInteger(D->param_size())<wbr>;<br>
-<br>
-    for (auto *Param : D->parameters()) {<br>
-      Hash.AddSubDecl(Param);<br>
-    }<br>
-<br>
     Inherited::VisitFunctionDecl(<wbr>D);<br>
   }<br>
<br>
@@ -326,10 +315,6 @@ public:<br>
     }<br>
   }<br>
<br>
-  void AddQualType(QualType T) {<br>
-    Hash.AddQualType(T);<br>
-  }<br>
-<br>
   void Visit(const Type *T) {<br>
     ID.AddInteger(T->getTypeClass(<wbr>));<br>
     Inherited::Visit(T);<br>
@@ -342,50 +327,6 @@ public:<br>
     VisitType(T);<br>
   }<br>
<br>
-  void VisitFunctionType(const FunctionType *T) {<br>
-    AddQualType(T->getReturnType()<wbr>);<br>
-    T->getExtInfo().Profile(ID);<br>
-    Hash.AddBoolean(T->isConst());<br>
-    Hash.AddBoolean(T->isVolatile(<wbr>));<br>
-    Hash.AddBoolean(T->isRestrict(<wbr>));<br>
-    VisitType(T);<br>
-  }<br>
-<br>
-  void VisitFunctionNoProtoType(const FunctionNoProtoType *T) {<br>
-    VisitFunctionType(T);<br>
-  }<br>
-<br>
-  void VisitFunctionProtoType(const FunctionProtoType *T) {<br>
-    ID.AddInteger(T->getNumParams(<wbr>));<br>
-    for (auto ParamType : T->getParamTypes())<br>
-      AddQualType(ParamType);<br>
-<br>
-    const auto &epi = T->getExtProtoInfo();<br>
-    ID.AddInteger(epi.Variadic);<br>
-    ID.AddInteger(epi.TypeQuals);<br>
-    ID.AddInteger(epi.<wbr>RefQualifier);<br>
-    ID.AddInteger(epi.<wbr>ExceptionSpec.Type);<br>
-<br>
-    if (epi.ExceptionSpec.Type == EST_Dynamic) {<br>
-      for (QualType Ex : epi.ExceptionSpec.Exceptions)<br>
-        AddQualType(Ex);<br>
-    } else if (epi.ExceptionSpec.Type == EST_ComputedNoexcept &&<br>
-               epi.ExceptionSpec.<wbr>NoexceptExpr) {<br>
-      AddStmt(epi.ExceptionSpec.<wbr>NoexceptExpr);<br>
-    } else if (epi.ExceptionSpec.Type == EST_Uninstantiated ||<br>
-               epi.ExceptionSpec.Type == EST_Unevaluated) {<br>
-      AddDecl(epi.ExceptionSpec.<wbr>SourceDecl->getCanonicalDecl()<wbr>);<br>
-    }<br>
-    if (epi.ExtParameterInfos) {<br>
-      for (unsigned i = 0; i != T->getNumParams(); ++i)<br>
-        ID.AddInteger(epi.<wbr>ExtParameterInfos[i].<wbr>getOpaqueValue());<br>
-    }<br>
-    epi.ExtInfo.Profile(ID);<br>
-    Hash.AddBoolean(epi.<wbr>HasTrailingReturn);<br>
-<br>
-    VisitFunctionType(T);<br>
-  }<br>
-<br>
   void VisitTypedefType(const TypedefType *T) {<br>
     AddDecl(T->getDecl());<br>
     Hash.AddQualType(T->getDecl()-<wbr>>getUnderlyingType());<br>
<br>
Modified: cfe/trunk/lib/Serialization/<wbr>ASTReader.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=298824&r1=298823&r2=298824&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/lib/<wbr>Serialization/ASTReader.cpp?<wbr>rev=298824&r1=298823&r2=<wbr>298824&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/Serialization/<wbr>ASTReader.cpp (original)<br>
+++ cfe/trunk/lib/Serialization/<wbr>ASTReader.cpp Sun Mar 26 16:39:16 2017<br>
@@ -9239,11 +9239,6 @@ void ASTReader::<wbr>diagnoseOdrViolations()<br>
         MethodVolatile,<br>
         MethodConst,<br>
         MethodInline,<br>
-        MethodNumberParameters,<br>
-        MethodParameterType,<br>
-        MethodParameterName,<br>
-        MethodParameterSingleDefaultAr<wbr>gument,<br>
-        MethodParameterDifferentDefaul<wbr>tArguments,<br>
       };<br>
<br>
       // These lambdas have the common portions of the ODR diagnostics.  This<br>
@@ -9567,84 +9562,6 @@ void ASTReader::<wbr>diagnoseOdrViolations()<br>
           Diagnosed = true;<br>
           break;<br>
         }<br>
-<br>
-        const unsigned FirstNumParameters = FirstMethod->param_size();<br>
-        const unsigned SecondNumParameters = SecondMethod->param_size();<br>
-        if (FirstNumParameters != SecondNumParameters) {<br>
-          ODRDiagError(FirstMethod-><wbr>getLocation(),<br>
-                       FirstMethod->getSourceRange(), MethodNumberParameters)<br>
-              << FirstName << FirstNumParameters;<br>
-          ODRDiagNote(SecondMethod-><wbr>getLocation(),<br>
-                      SecondMethod->getSourceRange()<wbr>, MethodNumberParameters)<br>
-              << SecondName << SecondNumParameters;<br>
-          Diagnosed = true;<br>
-          break;<br>
-        }<br>
-<br>
-        // Need this status boolean to know when break out of the switch.<br>
-        bool ParameterMismatch = false;<br>
-        for (unsigned I = 0; I < FirstNumParameters; ++I) {<br>
-          const ParmVarDecl *FirstParam = FirstMethod->getParamDecl(I);<br>
-          const ParmVarDecl *SecondParam = SecondMethod->getParamDecl(I);<br>
-          if (FirstParam->getType() != SecondParam->getType()) {<br>
-            ODRDiagError(FirstMethod-><wbr>getLocation(),<br>
-                         FirstMethod->getSourceRange(), MethodParameterType)<br>
-                << FirstName << (I + 1) << FirstParam->getType();<br>
-            ODRDiagNote(SecondMethod-><wbr>getLocation(),<br>
-                        SecondMethod->getSourceRange()<wbr>, MethodParameterType)<br>
-                << SecondName << (I + 1) << SecondParam->getType();<br>
-            ParameterMismatch = true;<br>
-            break;<br>
-          }<br>
-<br>
-          DeclarationName FirstParamName = FirstParam->getDeclName();<br>
-          DeclarationName SecondParamName = SecondParam->getDeclName();<br>
-          if (FirstParamName != SecondParamName) {<br>
-            ODRDiagError(FirstMethod-><wbr>getLocation(),<br>
-                         FirstMethod->getSourceRange(), MethodParameterName)<br>
-                << FirstName << (I + 1) << FirstParamName;<br>
-            ODRDiagNote(SecondMethod-><wbr>getLocation(),<br>
-                        SecondMethod->getSourceRange()<wbr>, MethodParameterName)<br>
-                << SecondName << (I + 1) << SecondParamName;<br>
-            ParameterMismatch = true;<br>
-            break;<br>
-          }<br>
-<br>
-          const Expr* FirstDefaultArg = FirstParam->getDefaultArg();<br>
-          const Expr* SecondDefaultArg = SecondParam->getDefaultArg();<br>
-          if ((!FirstDefaultArg && SecondDefaultArg) ||<br>
-              (FirstDefaultArg && !SecondDefaultArg)) {<br>
-            ODRDiagError(FirstMethod-><wbr>getLocation(),<br>
-                         FirstMethod->getSourceRange(),<br>
-                         MethodParameterSingleDefaultAr<wbr>gument)<br>
-                << FirstName << (I + 1) << (FirstDefaultArg != nullptr);<br>
-            ODRDiagNote(SecondMethod-><wbr>getLocation(),<br>
-                        SecondMethod->getSourceRange()<wbr>,<br>
-                        MethodParameterSingleDefaultAr<wbr>gument)<br>
-                << SecondName << (I + 1) << (SecondDefaultArg != nullptr);<br>
-            ParameterMismatch = true;<br>
-            break;<br>
-          }<br>
-<br>
-          if (ComputeODRHash(<wbr>FirstDefaultArg) !=<br>
-              ComputeODRHash(<wbr>SecondDefaultArg)) {<br>
-            ODRDiagError(FirstMethod-><wbr>getLocation(),<br>
-                         FirstMethod->getSourceRange(),<br>
-                         MethodParameterDifferentDefaul<wbr>tArguments)<br>
-                << FirstName << (I + 1);<br>
-            ODRDiagNote(SecondMethod-><wbr>getLocation(),<br>
-                        SecondMethod->getSourceRange()<wbr>,<br>
-                        MethodParameterDifferentDefaul<wbr>tArguments)<br>
-                << SecondName << (I + 1);<br>
-            ParameterMismatch = true;<br>
-            break;<br>
-          }<br>
-        }<br>
-<br>
-        if (ParameterMismatch) {<br>
-          Diagnosed = true;<br>
-          break;<br>
-        }<br>
<br>
         break;<br>
       }<br>
<br>
Modified: cfe/trunk/test/Modules/odr_<wbr>hash.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/odr_hash.cpp?rev=298824&r1=298823&r2=298824&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/<wbr>Modules/odr_hash.cpp?rev=<wbr>298824&r1=298823&r2=298824&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/Modules/odr_<wbr>hash.cpp (original)<br>
+++ cfe/trunk/test/Modules/odr_<wbr>hash.cpp Sun Mar 26 16:39:16 2017<br>
@@ -403,79 +403,6 @@ S8 s8;<br>
 // expected-note@first.h:* {{but in 'FirstModule' found method 'A' is const}}<br>
 #endif<br>
<br>
-#if defined(FIRST)<br>
-struct S9 {<br>
-  void A(int x) {}<br>
-  void A(int x, int y) {}<br>
-};<br>
-#elif defined(SECOND)<br>
-struct S9 {<br>
-  void A(int x, int y) {}<br>
-  void A(int x) {}<br>
-};<br>
-#else<br>
-S9 s9;<br>
-// expected-error@second.h:* {{'Method::S9' has different definitions in different modules; first difference is definition in module 'SecondModule' found method 'A' that has 2 parameters}}<br>
-// expected-note@first.h:* {{but in 'FirstModule' found method 'A' that has 1 parameter}}<br>
-#endif<br>
-<br>
-#if defined(FIRST)<br>
-struct S10 {<br>
-  void A(int x) {}<br>
-  void A(float x) {}<br>
-};<br>
-#elif defined(SECOND)<br>
-struct S10 {<br>
-  void A(float x) {}<br>
-  void A(int x) {}<br>
-};<br>
-#else<br>
-S10 s10;<br>
-// expected-error@second.h:* {{'Method::S10' has different definitions in different modules; first difference is definition in module 'SecondModule' found method 'A' with 1st parameter of type 'float'}}<br>
-// expected-note@first.h:* {{but in 'FirstModule' found method 'A' with 1st parameter of type 'int'}}<br>
-#endif<br>
-<br>
-#if defined(FIRST)<br>
-struct S11 {<br>
-  void A(int x) {}<br>
-};<br>
-#elif defined(SECOND)<br>
-struct S11 {<br>
-  void A(int y) {}<br>
-};<br>
-#else<br>
-S11 s11;<br>
-// expected-error@second.h:* {{'Method::S11' has different definitions in different modules; first difference is definition in module 'SecondModule' found method 'A' with 1st parameter named 'y'}}<br>
-// expected-note@first.h:* {{but in 'FirstModule' found method 'A' with 1st parameter named 'x'}}<br>
-#endif<br>
-<br>
-#if defined(FIRST)<br>
-struct S12 {<br>
-  void A(int x) {}<br>
-};<br>
-#elif defined(SECOND)<br>
-struct S12 {<br>
-  void A(int x = 1) {}<br>
-};<br>
-#else<br>
-S12 s12;<br>
-// expected-error@second.h:* {{'Method::S12' has different definitions in different modules; first difference is definition in module 'SecondModule' found method 'A' with 1st parameter with default argument}}<br>
-// expected-note@first.h:* {{but in 'FirstModule' found method 'A' with 1st parameter with no default argument}}<br>
-#endif<br>
-<br>
-#if defined(FIRST)<br>
-struct S13 {<br>
-  void A(int x = 1 + 0) {}<br>
-};<br>
-#elif defined(SECOND)<br>
-struct S13 {<br>
-  void A(int x = 1) {}<br>
-};<br>
-#else<br>
-S13 s13;<br>
-// expected-error@second.h:* {{'Method::S13' has different definitions in different modules; first difference is definition in module 'SecondModule' found method 'A' with 1st parameter with default argument}}<br>
-// expected-note@first.h:* {{but in 'FirstModule' found method 'A' with 1st parameter with different default argument}}<br>
-#endif<br>
 }  // namespace Method<br>
<br>
 // Naive parsing of AST can lead to cycles in processing.  Ensure<br>
@@ -595,6 +522,7 @@ S3 s3;<br>
 #endif<br>
 }  // namespace Using<br>
<br>
+<br>
 // Interesting cases that should not cause errors.  struct S should not error<br>
 // while struct T should error at the access specifier mismatch at the end.<br>
 namespace AllDecls {<br>
@@ -628,9 +556,6 @@ struct S {<br>
<br>
   typedef int typedef_int;<br>
   using using_int = int;<br>
-<br>
-  void method_one_arg(int x) {}<br>
-  void method_one_arg_default_<wbr>argument(int x = 5 + 5) {}<br>
 };<br>
 #elif defined(SECOND)<br>
 typedef int INT;<br>
@@ -662,9 +587,6 @@ struct S {<br>
<br>
   typedef int typedef_int;<br>
   using using_int = int;<br>
-<br>
-  void method_one_arg(int x) {}<br>
-  void method_one_arg_default_<wbr>argument(int x = 5 + 5) {}<br>
 };<br>
 #else<br>
 S *s;<br>
@@ -701,9 +623,6 @@ struct T {<br>
   typedef int typedef_int;<br>
   using using_int = int;<br>
<br>
-  void method_one_arg(int x) {}<br>
-  void method_one_arg_default_<wbr>argument(int x = 5 + 5) {}<br>
-<br>
   private:<br>
 };<br>
 #elif defined(SECOND)<br>
@@ -737,9 +656,6 @@ struct T {<br>
   typedef int typedef_int;<br>
   using using_int = int;<br>
<br>
-  void method_one_arg(int x) {}<br>
-  void method_one_arg_default_<wbr>argument(int x = 5 + 5) {}<br>
-<br>
   public:<br>
 };<br>
 #else<br>
<br>
<br>
______________________________<wbr>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>