diff options
| author | Roman Divacky <rdivacky@FreeBSD.org> | 2010-03-21 10:50:08 +0000 | 
|---|---|---|
| committer | Roman Divacky <rdivacky@FreeBSD.org> | 2010-03-21 10:50:08 +0000 | 
| commit | c0c7bca4e5b8d12699dc93a0da49e9e4bb79671b (patch) | |
| tree | 508d4388db78f87d35bf26a0400b4b03bc4c1f13 /lib/CodeGen/CGDebugInfo.cpp | |
| parent | 4a37f65f1c1373c9956d118a012943de2f61edb0 (diff) | |
Notes
Diffstat (limited to 'lib/CodeGen/CGDebugInfo.cpp')
| -rw-r--r-- | lib/CodeGen/CGDebugInfo.cpp | 20 | 
1 files changed, 14 insertions, 6 deletions
diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index 60aa4e784e6c..ad97d08a2bf7 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -104,12 +104,20 @@ llvm::DIFile CGDebugInfo::getOrCreateFile(SourceLocation Loc) {  void CGDebugInfo::CreateCompileUnit() {    // Get absolute path name. +  SourceManager &SM = CGM.getContext().getSourceManager();    std::string MainFileName = CGM.getCodeGenOpts().MainFileName;    if (MainFileName.empty())      MainFileName = "<unknown>"; +    llvm::sys::Path AbsFileName(MainFileName);    AbsFileName.makeAbsolute(); +  std::string MainFileDir; +  if (const FileEntry *MainFile = SM.getFileEntryForID(SM.getMainFileID())) +    MainFileDir = MainFile->getDir()->getName(); +  else +    MainFileDir = AbsFileName.getDirname(); +    unsigned LangTag;    const LangOptions &LO = CGM.getLangOptions();    if (LO.CPlusPlus) { @@ -138,7 +146,7 @@ void CGDebugInfo::CreateCompileUnit() {    // Create new compile unit.    TheCU = DebugFactory.CreateCompileUnit( -    LangTag, AbsFileName.getLast(), AbsFileName.getDirname(), Producer, true, +    LangTag, AbsFileName.getLast(), MainFileDir, Producer, true,      LO.Optimize, CGM.getCodeGenOpts().DwarfDebugFlags, RuntimeVers);  } @@ -561,13 +569,13 @@ CGDebugInfo::CreateCXXMemberFunction(const CXXMethodDecl *Method,      isa<CXXConstructorDecl>(Method) || isa<CXXDestructorDecl>(Method);    llvm::StringRef MethodName = getFunctionName(Method); -  llvm::StringRef MethodLinkageName;    llvm::DIType MethodTy = getOrCreateMethodType(Method, Unit);    // Since a single ctor/dtor corresponds to multiple functions, it doesn't    // make sense to give a single ctor/dtor a linkage name. +  MangleBuffer MethodLinkageName;    if (!IsCtorOrDtor) -    MethodLinkageName = CGM.getMangledName(Method); +    CGM.getMangledName(MethodLinkageName, Method);    SourceManager &SM = CGM.getContext().getSourceManager(); @@ -1299,7 +1307,7 @@ void CGDebugInfo::EmitFunctionStart(GlobalDecl GD, QualType FnType,                                      CGBuilderTy &Builder) {    llvm::StringRef Name; -  llvm::StringRef LinkageName; +  MangleBuffer LinkageName;    const Decl *D = GD.getDecl();    if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { @@ -1318,11 +1326,11 @@ void CGDebugInfo::EmitFunctionStart(GlobalDecl GD, QualType FnType,      if (!Name.empty() && Name[0] == '\01')        Name = Name.substr(1);      // Use mangled name as linkage name for c/c++ functions. -    LinkageName = CGM.getMangledName(GD); +    CGM.getMangledName(LinkageName, GD);    } else {      // Use llvm function name as linkage name.      Name = Fn->getName(); -    LinkageName = Name; +    LinkageName.setString(Name);      if (!Name.empty() && Name[0] == '\01')        Name = Name.substr(1);    }  | 
