Use current location as the location of compiler generated arguments, e.g. self, _cmd etc.

llvm-svn: 95743
This commit is contained in:
Devang Patel 2010-02-10 01:09:50 +00:00
parent 69920c5c8a
commit 1b5330afe9
2 changed files with 24 additions and 8 deletions

View File

@ -91,16 +91,15 @@ llvm::DICompileUnit CGDebugInfo::getOrCreateCompileUnit(SourceLocation Loc) {
// Get source file information.
const char *FileName = "<unknown>";
SourceManager &SM = CGM.getContext().getSourceManager();
unsigned FID = 0;
if (Loc.isValid()) {
PresumedLoc PLoc = SM.getPresumedLoc(Loc);
FileName = PLoc.getFilename();
FID = PLoc.getIncludeLoc().getRawEncoding();
}
unsigned FID = PLoc.getIncludeLoc().getRawEncoding();
// See if this compile unit has been used before.
llvm::DICompileUnit &Unit = CompileUnitCache[FID];
if (!Unit.isNull()) return Unit;
// See if this compile unit has been used before for this valid location.
llvm::DICompileUnit &Unit = CompileUnitCache[FID];
if (!Unit.isNull()) return Unit;
}
// Get absolute path name.
llvm::sys::Path AbsFileName(FileName);
@ -150,7 +149,7 @@ llvm::DICompileUnit CGDebugInfo::getOrCreateCompileUnit(SourceLocation Loc) {
RuntimeVers = LO.ObjCNonFragileABI ? 2 : 1;
// Create new compile unit.
return Unit = DebugFactory.CreateCompileUnit(
return DebugFactory.CreateCompileUnit(
LangTag, AbsFileName.getLast(), AbsFileName.getDirname(), Producer, isMain,
LO.Optimize, CGM.getCodeGenOpts().DwarfDebugFlags, RuntimeVers);
}
@ -1515,9 +1514,12 @@ void CGDebugInfo::EmitDeclare(const VarDecl *VD, unsigned Tag,
PresumedLoc PLoc = SM.getPresumedLoc(VD->getLocation());
unsigned Line = 0;
unsigned Column = 0;
if (!PLoc.isInvalid()) {
if (PLoc.isInvalid())
PLoc = SM.getPresumedLoc(CurLoc);
if (PLoc.isValid()) {
Line = PLoc.getLine();
Column = PLoc.getColumn();
Unit = getOrCreateCompileUnit(CurLoc);
} else {
Unit = llvm::DICompileUnit();
}

View File

@ -0,0 +1,14 @@
// RUN: %clang_cc1 -x objective-c -emit-llvm -g < %s | grep "\"self\", metadata"
// Test to check that "self" argument is assigned a location.
@interface Foo
-(void) Bar: (int)x ;
@end
@implementation Foo
-(void) Bar: (int)x
{
}
@end