From 779d865b4829205882b8c0acb5bad413bc36e1bf Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Fri, 17 Apr 2009 18:58:21 +0000 Subject: PCH support for indirect gotos and address-of-label expressions. llvm-svn: 69369 --- clang/lib/Frontend/PCHWriter.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'clang/lib/Frontend/PCHWriter.cpp') diff --git a/clang/lib/Frontend/PCHWriter.cpp b/clang/lib/Frontend/PCHWriter.cpp index bde859665f1..4bbaaa0c760 100644 --- a/clang/lib/Frontend/PCHWriter.cpp +++ b/clang/lib/Frontend/PCHWriter.cpp @@ -458,6 +458,7 @@ namespace { void VisitDoStmt(DoStmt *S); void VisitForStmt(ForStmt *S); void VisitGotoStmt(GotoStmt *S); + void VisitIndirectGotoStmt(IndirectGotoStmt *S); void VisitContinueStmt(ContinueStmt *S); void VisitBreakStmt(BreakStmt *S); void VisitReturnStmt(ReturnStmt *S); @@ -489,6 +490,7 @@ namespace { void VisitDesignatedInitExpr(DesignatedInitExpr *E); void VisitImplicitValueInitExpr(ImplicitValueInitExpr *E); void VisitVAArgExpr(VAArgExpr *E); + void VisitAddrLabelExpr(AddrLabelExpr *E); void VisitTypesCompatibleExpr(TypesCompatibleExpr *E); void VisitChooseExpr(ChooseExpr *E); void VisitGNUNullExpr(GNUNullExpr *E); @@ -601,6 +603,12 @@ void PCHStmtWriter::VisitGotoStmt(GotoStmt *S) { Code = pch::STMT_GOTO; } +void PCHStmtWriter::VisitIndirectGotoStmt(IndirectGotoStmt *S) { + VisitStmt(S); + Writer.WriteSubStmt(S->getTarget()); + Code = pch::STMT_INDIRECT_GOTO; +} + void PCHStmtWriter::VisitContinueStmt(ContinueStmt *S) { VisitStmt(S); Writer.AddSourceLocation(S->getContinueLoc(), Record); @@ -880,6 +888,14 @@ void PCHStmtWriter::VisitVAArgExpr(VAArgExpr *E) { Code = pch::EXPR_VA_ARG; } +void PCHStmtWriter::VisitAddrLabelExpr(AddrLabelExpr *E) { + VisitExpr(E); + Writer.AddSourceLocation(E->getAmpAmpLoc(), Record); + Writer.AddSourceLocation(E->getLabelLoc(), Record); + Record.push_back(Writer.GetLabelID(E->getLabel())); + Code = pch::EXPR_ADDR_LABEL; +} + void PCHStmtWriter::VisitTypesCompatibleExpr(TypesCompatibleExpr *E) { VisitExpr(E); Writer.AddTypeRef(E->getArgType1(), Record); -- cgit v1.2.3