This revision was automatically updated to reflect the committed changes. Closed by commit rG1127e479e850: Don't revisit the subexpressions of PseudoObjectExpr when building a (authored by ahatanak).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D139171/new/ https://reviews.llvm.org/D139171 Files: clang/lib/AST/ParentMap.cpp clang/test/SemaObjC/arc-repeated-weak.mm Index: clang/test/SemaObjC/arc-repeated-weak.mm =================================================================== --- clang/test/SemaObjC/arc-repeated-weak.mm +++ clang/test/SemaObjC/arc-repeated-weak.mm @@ -290,6 +290,18 @@ } while(0); } +struct S { + int a; + id b; +}; + +@interface C +@property S p; +@end + +void test_list_init(C *c) { + c.p = {0, c.p.b}; +} @interface Test (Methods) @end Index: clang/lib/AST/ParentMap.cpp =================================================================== --- clang/lib/AST/ParentMap.cpp +++ clang/lib/AST/ParentMap.cpp @@ -33,9 +33,11 @@ switch (S->getStmtClass()) { case Stmt::PseudoObjectExprClass: { - assert(OVMode == OV_Transparent && "Should not appear alongside OVEs"); PseudoObjectExpr *POE = cast<PseudoObjectExpr>(S); + if (OVMode == OV_Opaque && M[POE->getSyntacticForm()]) + break; + // If we are rebuilding the map, clear out any existing state. if (M[POE->getSyntacticForm()]) for (Stmt *SubStmt : S->children())
Index: clang/test/SemaObjC/arc-repeated-weak.mm =================================================================== --- clang/test/SemaObjC/arc-repeated-weak.mm +++ clang/test/SemaObjC/arc-repeated-weak.mm @@ -290,6 +290,18 @@ } while(0); } +struct S { + int a; + id b; +}; + +@interface C +@property S p; +@end + +void test_list_init(C *c) { + c.p = {0, c.p.b}; +} @interface Test (Methods) @end Index: clang/lib/AST/ParentMap.cpp =================================================================== --- clang/lib/AST/ParentMap.cpp +++ clang/lib/AST/ParentMap.cpp @@ -33,9 +33,11 @@ switch (S->getStmtClass()) { case Stmt::PseudoObjectExprClass: { - assert(OVMode == OV_Transparent && "Should not appear alongside OVEs"); PseudoObjectExpr *POE = cast<PseudoObjectExpr>(S); + if (OVMode == OV_Opaque && M[POE->getSyntacticForm()]) + break; + // If we are rebuilding the map, clear out any existing state. if (M[POE->getSyntacticForm()]) for (Stmt *SubStmt : S->children())
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits