diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-11-15 06:20:27 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-11-15 06:20:27 +0000 |
commit | 64482c6ddba162c0c4df07ed4791fb08736d5a4c (patch) | |
tree | e001a4c9b06d9df014d378585a59f9dc31a4f1d3 | |
parent | e7bbab91f5cc899104d0a1dee6059d8413c70eeb (diff) |
[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
-rw-r--r-- | lib/Serialization/ASTWriterStmt.cpp | 4 | ||||
-rw-r--r-- | test/PCH/objc_exprs.h | 8 |
2 files changed, 12 insertions, 0 deletions
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<OpaqueValueExpr>(*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<foo>) objc_id_protocol_ty; typedef typeof(itf*) objc_interface_ty; typedef typeof(itf<foo>*) objc_qual_interface_ty; + +@interface PP +@property (assign) id prop; +@end + +static inline id getPseudoObject(PP *p) { + return p.prop; +} |