Author: xazax Date: Mon Apr 3 16:06:45 2017 New Revision: 299386 URL: http://llvm.org/viewvc/llvm-project?rev=299386&view=rev Log: Revert r299355 "[ASTImporter] Fix for importing unnamed structs"
It breaks windows bots. Modified: cfe/trunk/lib/AST/ASTImporter.cpp cfe/trunk/test/ASTMerge/struct/Inputs/struct1.c cfe/trunk/test/ASTMerge/struct/Inputs/struct2.c cfe/trunk/test/ASTMerge/struct/test.c Modified: cfe/trunk/lib/AST/ASTImporter.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTImporter.cpp?rev=299386&r1=299385&r2=299386&view=diff ============================================================================== --- cfe/trunk/lib/AST/ASTImporter.cpp (original) +++ cfe/trunk/lib/AST/ASTImporter.cpp Mon Apr 3 16:06:45 2017 @@ -1221,10 +1221,6 @@ static Optional<unsigned> findUntaggedSt // If the field looks like this: // struct { ... } A; QualType FieldType = F->getType(); - // In case of nested structs. - while (const auto *ElabType = dyn_cast<ElaboratedType>(FieldType)) { - FieldType = ElabType->getNamedType(); - } if (const auto *RecType = dyn_cast<RecordType>(FieldType)) { const RecordDecl *RecDecl = RecType->getDecl(); if (RecDecl->getDeclContext() == Owner && @@ -3024,8 +3020,9 @@ Decl *ASTNodeImporter::VisitRecordDecl(R } if (RecordDecl *FoundRecord = dyn_cast<RecordDecl>(Found)) { - if (!SearchName) { - // If both unnamed structs/unions are in a record context, make sure + if (D->isAnonymousStructOrUnion() && + FoundRecord->isAnonymousStructOrUnion()) { + // If both anonymous structs/unions are in a record context, make sure // they occur in the same location in the context records. if (Optional<unsigned> Index1 = findUntaggedStructOrUnionIndex(D)) { Modified: cfe/trunk/test/ASTMerge/struct/Inputs/struct1.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ASTMerge/struct/Inputs/struct1.c?rev=299386&r1=299385&r2=299386&view=diff ============================================================================== --- cfe/trunk/test/ASTMerge/struct/Inputs/struct1.c (original) +++ cfe/trunk/test/ASTMerge/struct/Inputs/struct1.c Mon Apr 3 16:06:45 2017 @@ -77,65 +77,3 @@ typedef struct { } S13; S13 x13; - -// Matches -struct Unnamed { - union { - struct { - int i; - } S; - struct { - float i; - } R; - } U; -} x14; - -// Matches -struct DeepUnnamed { - union { - union { - struct { - long i; - } S; - struct { - int i; - } R; - } U1; - union { - struct { - long i; - } S; - struct { - float i; - } T; - } U2; - } U; - struct { - long i; - } V; -} x15; - -// Mismatch due to unnamed struct used internally -struct DeepUnnamedError { - union { - union { - struct { - long i; - } S; - struct { - int i; - } R; - } U1; - union { - struct { - long i; // Mismatch here. - } S; - struct { - float i; - } T; - } U2; - } U; - struct { - long i; - } V; -} x16; Modified: cfe/trunk/test/ASTMerge/struct/Inputs/struct2.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ASTMerge/struct/Inputs/struct2.c?rev=299386&r1=299385&r2=299386&view=diff ============================================================================== --- cfe/trunk/test/ASTMerge/struct/Inputs/struct2.c (original) +++ cfe/trunk/test/ASTMerge/struct/Inputs/struct2.c Mon Apr 3 16:06:45 2017 @@ -74,65 +74,3 @@ typedef struct { } S13; S13 x13; - -// Matches -struct Unnamed { - union { - struct { - int i; - } S; - struct { - float i; - } R; - } U; -} x14; - -// Matches -struct DeepUnnamed { - union { - union { - struct { - long i; - } S; - struct { - int i; - } R; - } U1; - union { - struct { - long i; - } S; - struct { - float i; - } T; - } U2; - } U; - struct { - long i; - } V; -} x15; - -// Mismatch due to unnamed struct used internally -struct DeepUnnamedError { - union { - union { - struct { - long i; - } S; - struct { - int i; - } R; - } U1; - union { - struct { - float i; // Mismatch here. - } S; - struct { - float i; - } T; - } U2; - } U; - struct { - long i; - } V; -} x16; Modified: cfe/trunk/test/ASTMerge/struct/test.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ASTMerge/struct/test.c?rev=299386&r1=299385&r2=299386&view=diff ============================================================================== --- cfe/trunk/test/ASTMerge/struct/test.c (original) +++ cfe/trunk/test/ASTMerge/struct/test.c Mon Apr 3 16:06:45 2017 @@ -44,12 +44,4 @@ // CHECK: struct2.c:72:7: note: field 'i' has type 'int' here // CHECK: struct2.c:76:5: error: external variable 'x13' declared with incompatible types in different translation units ('S13' vs. 'S13') // CHECK: struct1.c:79:5: note: declared here with type 'S13' -// CHECK: struct1.c:130:7: warning: type 'struct DeepUnnamedError::(anonymous at [[PATH_TO_INPUTS:.+]]/struct1.c:130:7)' has incompatible definitions in different translation units -// CHECK: struct1.c:131:14: note: field 'i' has type 'long' here -// CHECK: struct2.c:128:15: note: field 'i' has type 'float' here -// CHECK: struct1.c:129:5: warning: type 'union DeepUnnamedError::(anonymous at [[PATH_TO_INPUTS]]/struct1.c:129:5)' has incompatible definitions in different translation units -// CHECK: struct1.c:132:9: note: field 'S' has type 'struct (anonymous struct at [[PATH_TO_INPUTS]]/struct1.c:130:7)' here -// CHECK: struct2.c:129:9: note: field 'S' has type 'struct (anonymous struct at [[PATH_TO_INPUTS]]/struct2.c:127:7)' here -// CHECK: struct2.c:138:3: error: external variable 'x16' declared with incompatible types in different translation units ('struct DeepUnnamedError' vs. 'struct DeepUnnamedError') -// CHECK: struct1.c:141:3: note: declared here with type 'struct DeepUnnamedError' -// CHECK: 11 warnings and 9 errors generated +// CHECK: 9 warnings and 8 errors generated _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits