From 49836b448e256f91b1f4b848e9cf92412e09f568 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 2 Apr 2009 04:16:50 +0000 Subject: fix a FIXME, providing accurate source range info for DeclStmt's. The end of the range is now the ';' location. For something like this: $ cat t2.c #define bool int void f(int x, int y) { bool b = !x && y; } We used to produce: $ clang-cc t2.c -ast-dump typedef char *__builtin_va_list; void f(int x, int y) (CompoundStmt 0x2201f10 (DeclStmt 0x2201ef0 <---- 0x2201a20 "int b = (BinaryOperator 0x2201ed0 'int' '&&' (UnaryOperator 0x2201e90 'int' prefix '!' (DeclRefExpr 0x2201c90 'int' ParmVar='x' 0x2201a50)) (DeclRefExpr 0x2201eb0 'int' ParmVar='y' 0x2201e10))") Now we produce: $ clang-cc t2.c -ast-dump typedef char *__builtin_va_list; void f(int x, int y) (CompoundStmt 0x2201f10 (DeclStmt 0x2201ef0 <------ 0x2201a20 "int b = (BinaryOperator 0x2201ed0 'int' '&&' (UnaryOperator 0x2201e90 'int' prefix '!' (DeclRefExpr 0x2201c90 'int' ParmVar='x' 0x2201a50)) (DeclRefExpr 0x2201eb0 'int' ParmVar='y' 0x2201e10))") llvm-svn: 68288 --- clang/lib/Parse/ParseTemplate.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'clang/lib/Parse/ParseTemplate.cpp') diff --git a/clang/lib/Parse/ParseTemplate.cpp b/clang/lib/Parse/ParseTemplate.cpp index 0f9bcd2219b..d38df93ace1 100644 --- a/clang/lib/Parse/ParseTemplate.cpp +++ b/clang/lib/Parse/ParseTemplate.cpp @@ -35,6 +35,7 @@ using namespace clang; /// 'template' '<' '>' declaration Parser::DeclPtrTy Parser::ParseTemplateDeclarationOrSpecialization(unsigned Context, + SourceLocation &DeclEnd, AccessSpecifier AS) { assert((Tok.is(tok::kw_export) || Tok.is(tok::kw_template)) && "Token does not start a template declaration."); @@ -99,6 +100,9 @@ Parser::ParseTemplateDeclarationOrSpecialization(unsigned Context, // FIXME: Converting DeclGroupPtr to DeclPtr like this is an insanely gruesome // hack, will bring up on cfe-dev. DeclGroupPtrTy DG = ParseDeclarationOrFunctionDefinition(&ParamLists, AS); + // FIXME: Should be ';' location not the token after it. Resolve with above + // fixmes. + DeclEnd = Tok.getLocation(); return DeclPtrTy::make(DG.get()); } -- cgit v1.2.3