diff options
Diffstat (limited to 'clang/lib/Serialization/ASTReader.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 977cc115ca1..72d4c75b063 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -8956,6 +8956,7 @@ void ASTReader::diagnoseOdrViolations() { PrivateSpecifer, ProtectedSpecifer, StaticAssert, + Field, Other } FirstDiffType = Other, SecondDiffType = Other; @@ -8979,6 +8980,8 @@ void ASTReader::diagnoseOdrViolations() { llvm_unreachable("Invalid access specifier"); case Decl::StaticAssert: return StaticAssert; + case Decl::Field: + return Field; } }; @@ -9058,6 +9061,7 @@ void ASTReader::diagnoseOdrViolations() { StaticAssertCondition, StaticAssertMessage, StaticAssertOnlyMessage, + FieldName, }; // These lambdas have the common portions of the ODR diagnostics. This @@ -9146,6 +9150,24 @@ void ASTReader::diagnoseOdrViolations() { } break; } + case Field: { + FieldDecl *FirstField = cast<FieldDecl>(FirstDecl); + FieldDecl *SecondField = cast<FieldDecl>(SecondDecl); + IdentifierInfo *FirstII = FirstField->getIdentifier(); + IdentifierInfo *SecondII = SecondField->getIdentifier(); + if (FirstII->getName() != SecondII->getName()) { + ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(), + FieldName) + << FirstII; + ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(), + FieldName) + << SecondII; + + Diagnosed = true; + break; + } + break; + } } if (Diagnosed == true) |