http://llvm.org/bugs/show_bug.cgi?id=8329

           Summary: getDefaultArgRange() returns empty SourceRange
           Product: clang
           Version: trunk
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: -New Bugs
        AssignedTo: [email protected]
        ReportedBy: [email protected]
                CC: [email protected]


When getDefaultArgRange() is called for any ParmVarDecl the resulting
SourceRange's beginning and end are equal. Both refer to the start of the
actual default argument. To get the real source range one has to adapt the end
of the range via Lexer::MeasureTokenLength().

Nevertheless the documentation for getDefaultArgRange() claims it will
"Retrieve the source range that covers the entire default argument." which is
IMHO outright wrong. So either the method needs to return the correct source
range or the comment and probably the method name need to be changed according
to what it actually does, e.g. getDefaultSourceLocation().


example
-------

void bluh(const ParmVarDecl& p, const SourceManager& sm) {
  if(p.hasDefaultArg()) {
    clang::SourceRange range = p.getDefaultArgRange();
    range.getBegin().print(llvm::errs(), sm);
    llvm::errs() << " - ";
    range.getEnd().print(llvm::errs(), sm);
    llvm::errs() << "'\n";
  }
}

when wrapped and executed for this code

$ cat test.cpp
void blah(int a = 1);

prints

test.cpp:1:22 - test.cpp:1:22


expected output

test.cpp:1:22 - test.cpp:1:23

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs

Reply via email to