diff options
Diffstat (limited to 'gnu/llvm/tools/clang/lib/Serialization/ASTWriterStmt.cpp')
| -rw-r--r-- | gnu/llvm/tools/clang/lib/Serialization/ASTWriterStmt.cpp | 49 |
1 files changed, 33 insertions, 16 deletions
diff --git a/gnu/llvm/tools/clang/lib/Serialization/ASTWriterStmt.cpp b/gnu/llvm/tools/clang/lib/Serialization/ASTWriterStmt.cpp index c5f4495d2f0..09cb0ddc4d4 100644 --- a/gnu/llvm/tools/clang/lib/Serialization/ASTWriterStmt.cpp +++ b/gnu/llvm/tools/clang/lib/Serialization/ASTWriterStmt.cpp @@ -8,7 +8,7 @@ //===----------------------------------------------------------------------===// /// /// \file -/// \brief Implements serialization for Statements and Expressions. +/// Implements serialization for Statements and Expressions. /// //===----------------------------------------------------------------------===// @@ -247,7 +247,7 @@ void ASTStmtWriter::VisitGCCAsmStmt(GCCAsmStmt *S) { Record.AddStmt(S->getAsmString()); // Outputs - for (unsigned I = 0, N = S->getNumOutputs(); I != N; ++I) { + for (unsigned I = 0, N = S->getNumOutputs(); I != N; ++I) { Record.AddIdentifierRef(S->getOutputIdentifier(I)); Record.AddStmt(S->getOutputConstraintLiteral(I)); Record.AddStmt(S->getOutputExpr(I)); @@ -444,6 +444,13 @@ void ASTStmtWriter::VisitIntegerLiteral(IntegerLiteral *E) { Code = serialization::EXPR_INTEGER_LITERAL; } +void ASTStmtWriter::VisitFixedPointLiteral(FixedPointLiteral *E) { + VisitExpr(E); + Record.AddSourceLocation(E->getLocation()); + Record.AddAPInt(E->getValue()); + Code = serialization::EXPR_INTEGER_LITERAL; +} + void ASTStmtWriter::VisitFloatingLiteral(FloatingLiteral *E) { VisitExpr(E); Record.push_back(E->getRawSemantics()); @@ -509,6 +516,7 @@ void ASTStmtWriter::VisitUnaryOperator(UnaryOperator *E) { Record.AddStmt(E->getSubExpr()); Record.push_back(E->getOpcode()); // FIXME: stable encoding Record.AddSourceLocation(E->getOperatorLoc()); + Record.push_back(E->canOverflow()); Code = serialization::EXPR_UNARY_OPERATOR; } @@ -705,6 +713,7 @@ ASTStmtWriter::VisitBinaryConditionalOperator(BinaryConditionalOperator *E) { void ASTStmtWriter::VisitImplicitCastExpr(ImplicitCastExpr *E) { VisitCastExpr(E); + Record.push_back(E->isPartOfExplicitCast()); if (E->path_size() == 0) AbbrevToUse = Writer.getExprImplicitCastAbbrev(); @@ -991,7 +1000,7 @@ void ASTStmtWriter::VisitObjCDictionaryLiteral(ObjCDictionaryLiteral *E) { Record.push_back(NumExpansions); } } - + Record.AddDeclRef(E->getDictWithObjectsMethod()); Record.AddSourceRange(E->getSourceRange()); Code = serialization::EXPR_OBJC_DICTIONARY_LITERAL; @@ -1055,7 +1064,7 @@ void ASTStmtWriter::VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E) { Record.push_back(2); Record.AddDeclRef(E->getClassReceiver()); } - + Code = serialization::EXPR_OBJC_PROPERTY_REF_EXPR; } @@ -1066,7 +1075,7 @@ void ASTStmtWriter::VisitObjCSubscriptRefExpr(ObjCSubscriptRefExpr *E) { Record.AddStmt(E->getKeyExpr()); Record.AddDeclRef(E->getAtIndexMethodDecl()); Record.AddDeclRef(E->setAtIndexMethodDecl()); - + Code = serialization::EXPR_OBJC_SUBSCRIPT_REF_EXPR; } @@ -1099,9 +1108,9 @@ void ASTStmtWriter::VisitObjCMessageExpr(ObjCMessageExpr *E) { Record.AddDeclRef(E->getMethodDecl()); } else { Record.push_back(0); - Record.AddSelectorRef(E->getSelector()); + Record.AddSelectorRef(E->getSelector()); } - + Record.AddSourceLocation(E->getLeftLoc()); Record.AddSourceLocation(E->getRightLoc()); @@ -1287,14 +1296,14 @@ void ASTStmtWriter::VisitLambdaExpr(LambdaExpr *E) { Record.push_back(E->ExplicitParams); Record.push_back(E->ExplicitResultType); Record.AddSourceLocation(E->ClosingBrace); - + // Add capture initializers. for (LambdaExpr::capture_init_iterator C = E->capture_init_begin(), CEnd = E->capture_init_end(); C != CEnd; ++C) { Record.AddStmt(*C); } - + Code = serialization::EXPR_LAMBDA; } @@ -1441,7 +1450,7 @@ void ASTStmtWriter::VisitCXXDeleteExpr(CXXDeleteExpr *E) { Record.AddDeclRef(E->getOperatorDelete()); Record.AddStmt(E->getArgument()); Record.AddSourceLocation(E->getSourceRange().getBegin()); - + Code = serialization::EXPR_CXX_DELETE; } @@ -1698,6 +1707,7 @@ void ASTStmtWriter::VisitOpaqueValueExpr(OpaqueValueExpr *E) { VisitExpr(E); Record.AddStmt(E->getSourceExpr()); Record.AddSourceLocation(E->getLocation()); + Record.push_back(E->isUnique()); Code = serialization::EXPR_OPAQUE_VALUE; } @@ -1888,7 +1898,12 @@ void OMPClauseWriter::VisitOMPScheduleClause(OMPScheduleClause *C) { } void OMPClauseWriter::VisitOMPOrderedClause(OMPOrderedClause *C) { + Record.push_back(C->getLoopNumIterations().size()); Record.AddStmt(C->getNumForLoops()); + for (Expr *NumIter : C->getLoopNumIterations()) + Record.AddStmt(NumIter); + for (unsigned I = 0, E = C->getLoopNumIterations().size(); I <E; ++I) + Record.AddStmt(C->getLoopCunter(I)); Record.AddSourceLocation(C->getLParenLoc()); } @@ -2092,13 +2107,15 @@ void OMPClauseWriter::VisitOMPFlushClause(OMPFlushClause *C) { void OMPClauseWriter::VisitOMPDependClause(OMPDependClause *C) { Record.push_back(C->varlist_size()); + Record.push_back(C->getNumLoops()); Record.AddSourceLocation(C->getLParenLoc()); Record.push_back(C->getDependencyKind()); Record.AddSourceLocation(C->getDependencyLoc()); Record.AddSourceLocation(C->getColonLoc()); for (auto *VE : C->varlists()) Record.AddStmt(VE); - Record.AddStmt(C->getCounterValue()); + for (unsigned I = 0, E = C->getNumLoops(); I < E; ++I) + Record.AddStmt(C->getLoopData(I)); } void OMPClauseWriter::VisitOMPDeviceClause(OMPDeviceClause *C) { @@ -2675,13 +2692,13 @@ void ASTWriter::ClearSwitchCaseIDs() { SwitchCaseIDs.clear(); } -/// \brief Write the given substatement or subexpression to the +/// Write the given substatement or subexpression to the /// bitstream. void ASTWriter::WriteSubStmt(Stmt *S) { RecordData Record; ASTStmtWriter Writer(*this, Record); ++NumStatements; - + if (!S) { Stream.EmitRecord(serialization::STMT_NULL_PTR, Record); return; @@ -2714,12 +2731,12 @@ void ASTWriter::WriteSubStmt(Stmt *S) { #endif Writer.Visit(S); - + uint64_t Offset = Writer.Emit(); SubStmtEntries[S] = Offset; } -/// \brief Flush all of the statements that have been added to the +/// Flush all of the statements that have been added to the /// queue via AddStmt(). void ASTRecordWriter::FlushStmts() { // We expect to be the only consumer of the two temporary statement maps, @@ -2729,7 +2746,7 @@ void ASTRecordWriter::FlushStmts() { for (unsigned I = 0, N = StmtsToEmit.size(); I != N; ++I) { Writer->WriteSubStmt(StmtsToEmit[I]); - + assert(N == StmtsToEmit.size() && "record modified while being written!"); // Note that we are at the end of a full expression. Any |
