[cfe-commits] r69497 - in /cfe/trunk: include/clang/AST/Stmt.h lib/AST/StmtSerialization.cpp lib/Frontend/PCHReader.cpp lib/Frontend/PCHWriter.cpp lib/Sema/SemaStmt.cpp
Chris Lattner
sabre at nondot.org
Sat Apr 18 18:04:21 PDT 2009
Author: lattner
Date: Sat Apr 18 20:04:21 2009
New Revision: 69497
URL: http://llvm.org/viewvc/llvm-project?rev=69497&view=rev
Log:
Add location info for indirect goto.
Modified:
cfe/trunk/include/clang/AST/Stmt.h
cfe/trunk/lib/AST/StmtSerialization.cpp
cfe/trunk/lib/Frontend/PCHReader.cpp
cfe/trunk/lib/Frontend/PCHWriter.cpp
cfe/trunk/lib/Sema/SemaStmt.cpp
Modified: cfe/trunk/include/clang/AST/Stmt.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Stmt.h?rev=69497&r1=69496&r2=69497&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/Stmt.h (original)
+++ cfe/trunk/include/clang/AST/Stmt.h Sat Apr 18 20:04:21 2009
@@ -850,22 +850,26 @@
/// IndirectGotoStmt - This represents an indirect goto.
///
class IndirectGotoStmt : public Stmt {
+ SourceLocation GotoLoc;
Stmt *Target;
- // FIXME: Add location information (e.g. SourceLocation objects).
- // When doing so, update the PCH serialization routines.
public:
- IndirectGotoStmt(Expr *target) : Stmt(IndirectGotoStmtClass),
- Target((Stmt*)target){}
+ IndirectGotoStmt(SourceLocation gotoLoc, Expr *target)
+ : Stmt(IndirectGotoStmtClass), GotoLoc(gotoLoc), Target((Stmt*)target) {}
/// \brief Build an empty indirect goto statement.
explicit IndirectGotoStmt(EmptyShell Empty)
: Stmt(IndirectGotoStmtClass, Empty) { }
+ void setGotoLoc(SourceLocation L) { GotoLoc = L; }
+ SourceLocation getGotoLoc() const { return GotoLoc; }
+
Expr *getTarget();
const Expr *getTarget() const;
void setTarget(Expr *E) { Target = reinterpret_cast<Stmt*>(E); }
- virtual SourceRange getSourceRange() const { return SourceRange(); }
+ virtual SourceRange getSourceRange() const {
+ return SourceRange(GotoLoc, Target->getLocEnd());
+ }
static bool classof(const Stmt *T) {
return T->getStmtClass() == IndirectGotoStmtClass;
Modified: cfe/trunk/lib/AST/StmtSerialization.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtSerialization.cpp?rev=69497&r1=69496&r2=69497&view=diff
==============================================================================
--- cfe/trunk/lib/AST/StmtSerialization.cpp (original)
+++ cfe/trunk/lib/AST/StmtSerialization.cpp Sat Apr 18 20:04:21 2009
@@ -691,7 +691,7 @@
IndirectGotoStmt* IndirectGotoStmt::CreateImpl(Deserializer& D, ASTContext& C) {
Expr* Target = D.ReadOwnedPtr<Expr>(C);
- return new IndirectGotoStmt(Target);
+ return new IndirectGotoStmt(SourceLocation(), Target);
}
void InitListExpr::EmitImpl(Serializer& S) const {
Modified: cfe/trunk/lib/Frontend/PCHReader.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/PCHReader.cpp?rev=69497&r1=69496&r2=69497&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/PCHReader.cpp (original)
+++ cfe/trunk/lib/Frontend/PCHReader.cpp Sat Apr 18 20:04:21 2009
@@ -415,6 +415,7 @@
unsigned PCHStmtReader::VisitIndirectGotoStmt(IndirectGotoStmt *S) {
VisitStmt(S);
+ S->setGotoLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
S->setTarget(cast_or_null<Expr>(StmtStack.back()));
return 1;
}
Modified: cfe/trunk/lib/Frontend/PCHWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/PCHWriter.cpp?rev=69497&r1=69496&r2=69497&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/PCHWriter.cpp (original)
+++ cfe/trunk/lib/Frontend/PCHWriter.cpp Sat Apr 18 20:04:21 2009
@@ -610,6 +610,7 @@
void PCHStmtWriter::VisitIndirectGotoStmt(IndirectGotoStmt *S) {
VisitStmt(S);
+ Writer.AddSourceLocation(S->getGotoLoc(), Record);
Writer.WriteSubStmt(S->getTarget());
Code = pch::STMT_INDIRECT_GOTO;
}
Modified: cfe/trunk/lib/Sema/SemaStmt.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=69497&r1=69496&r2=69497&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaStmt.cpp (original)
+++ cfe/trunk/lib/Sema/SemaStmt.cpp Sat Apr 18 20:04:21 2009
@@ -666,7 +666,7 @@
}
Action::OwningStmtResult
-Sema::ActOnIndirectGotoStmt(SourceLocation GotoLoc,SourceLocation StarLoc,
+Sema::ActOnIndirectGotoStmt(SourceLocation GotoLoc, SourceLocation StarLoc,
ExprArg DestExp) {
// Convert operand to void*
Expr* E = DestExp.takeAs<Expr>();
@@ -676,7 +676,7 @@
if (DiagnoseAssignmentResult(ConvTy, StarLoc, Context.VoidPtrTy, ETy,
E, "passing"))
return StmtError();
- return Owned(new (Context) IndirectGotoStmt(E));
+ return Owned(new (Context) IndirectGotoStmt(GotoLoc, E));
}
Action::OwningStmtResult
More information about the cfe-commits
mailing list