From: Argyrios Kyrtzidis Date: Tue, 15 Nov 2011 06:20:27 +0000 (+0000) Subject: [PCH] When serializing an PseudoObjectExpr or AtomicExpr, the serialization code... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=64482c6ddba162c0c4df07ed4791fb08736d5a4c;p=clang [PCH] When serializing an PseudoObjectExpr or AtomicExpr, the serialization code must be set otherwise it will crash with asserts on or it will be written as null pointer. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144626 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Serialization/ASTWriterStmt.cpp b/lib/Serialization/ASTWriterStmt.cpp index e25a20b353..e3311e9d90 100644 --- a/lib/Serialization/ASTWriterStmt.cpp +++ b/lib/Serialization/ASTWriterStmt.cpp @@ -753,6 +753,8 @@ void ASTStmtWriter::VisitPseudoObjectExpr(PseudoObjectExpr *E) { if (OpaqueValueExpr *OVE = dyn_cast(*i)) Writer.AddStmt(OVE->getSourceExpr()); } + + Code = serialization::EXPR_PSEUDO_OBJECT; } void ASTStmtWriter::VisitAtomicExpr(AtomicExpr *E) { @@ -768,6 +770,8 @@ void ASTStmtWriter::VisitAtomicExpr(AtomicExpr *E) { } Writer.AddSourceLocation(E->getBuiltinLoc(), Record); Writer.AddSourceLocation(E->getRParenLoc(), Record); + + Code = serialization::EXPR_ATOMIC; } //===----------------------------------------------------------------------===// diff --git a/test/PCH/objc_exprs.h b/test/PCH/objc_exprs.h index b811430c2e..807304c20f 100644 --- a/test/PCH/objc_exprs.h +++ b/test/PCH/objc_exprs.h @@ -16,3 +16,11 @@ typedef typeof(id) objc_id_protocol_ty; typedef typeof(itf*) objc_interface_ty; typedef typeof(itf*) objc_qual_interface_ty; + +@interface PP +@property (assign) id prop; +@end + +static inline id getPseudoObject(PP *p) { + return p.prop; +}