diff options
Diffstat (limited to 'lib/Serialization/ASTReaderStmt.cpp')
-rw-r--r-- | lib/Serialization/ASTReaderStmt.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/lib/Serialization/ASTReaderStmt.cpp b/lib/Serialization/ASTReaderStmt.cpp index 4955343a42..e94a9125b7 100644 --- a/lib/Serialization/ASTReaderStmt.cpp +++ b/lib/Serialization/ASTReaderStmt.cpp @@ -533,6 +533,18 @@ void ASTStmtReader::VisitExpr(Expr *E) { void ASTStmtReader::VisitConstantExpr(ConstantExpr *E) { VisitExpr(E); + E->ConstantExprBits.ResultKind = Record.readInt(); + switch (E->ConstantExprBits.ResultKind) { + case ConstantExpr::RSK_Int64: { + E->Int64Result() = Record.readInt(); + uint64_t tmp = Record.readInt(); + E->ConstantExprBits.IsUnsigned = tmp & 0x1; + E->ConstantExprBits.BitWidth = tmp >> 1; + break; + } + case ConstantExpr::RSK_APValue: + E->APValueResult() = Record.readAPValue(); + } E->setSubExpr(Record.readSubExpr()); } @@ -590,7 +602,8 @@ void ASTStmtReader::VisitFixedPointLiteral(FixedPointLiteral *E) { void ASTStmtReader::VisitFloatingLiteral(FloatingLiteral *E) { VisitExpr(E); - E->setRawSemantics(static_cast<Stmt::APFloatSemantics>(Record.readInt())); + E->setRawSemantics( + static_cast<llvm::APFloatBase::Semantics>(Record.readInt())); E->setExact(Record.readInt()); E->setValue(Record.getContext(), Record.readAPFloat(E->getSemantics())); E->setLocation(ReadSourceLocation()); @@ -2510,7 +2523,11 @@ Stmt *ASTReader::ReadStmtFromStream(ModuleFile &F) { break; case EXPR_CONSTANT: - S = new (Context) ConstantExpr(Empty); + S = ConstantExpr::CreateEmpty( + Context, + static_cast<ConstantExpr::ResultStorageKind>( + Record[ASTStmtReader::NumExprFields]), + Empty); break; case EXPR_PREDEFINED: |