diff --git a/clang/lib/AST/ParentMap.cpp b/clang/lib/AST/ParentMap.cpp --- a/clang/lib/AST/ParentMap.cpp +++ b/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(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()) diff --git a/clang/test/SemaObjC/arc-repeated-weak.mm b/clang/test/SemaObjC/arc-repeated-weak.mm --- a/clang/test/SemaObjC/arc-repeated-weak.mm +++ b/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