]> granicus.if.org Git - clang/commitdiff
Fix ASTUnit::getOriginalSourceFileName() when using ASTUnit's derived from
authorDaniel Dunbar <daniel@zuster.org>
Wed, 2 Dec 2009 08:44:16 +0000 (08:44 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Wed, 2 Dec 2009 08:44:16 +0000 (08:44 +0000)
source files.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90311 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Frontend/ASTUnit.h
lib/Frontend/ASTUnit.cpp

index c55638a2370956d974c9f2f9fb3d44a725d3ce90..31d0b26c0d2fad0a5005c823092c815e15a0204a 100644 (file)
@@ -54,6 +54,9 @@ class ASTUnit {
   // FIXME: This is temporary; eventually, CIndex will always do this.
   bool                              OnlyLocalDecls;
   
+  /// The name of the original source file used to generate this ASTUnit.
+  std::string OriginalSourceFile;
+
   // Critical optimization when using clang_getCursor().
   ASTLocation LastLoc;
   
index ac213380588a925aba4ee9f15dee26bd39f64112..87d0d7d1a46f38ef32c4b2475923549096101923 100644 (file)
@@ -95,10 +95,11 @@ public:
 } // anonymous namespace
 
 const std::string &ASTUnit::getOriginalSourceFileName() {
-  return dyn_cast<PCHReader>(Ctx->getExternalSource())->getOriginalSourceFile();
+  return OriginalSourceFile;
 }
 
 const std::string &ASTUnit::getPCHFileName() {
+  assert(Ctx->getExternalSource() && "Not an ASTUnit from a PCH file!");
   return dyn_cast<PCHReader>(Ctx->getExternalSource())->getFileName();
 }
 
@@ -138,6 +139,8 @@ ASTUnit *ASTUnit::LoadFromPCHFile(const std::string &Filename,
     return NULL;
   }
 
+  AST->OriginalSourceFile = Reader->getOriginalSourceFile();
+
   // PCH loaded successfully. Now create the preprocessor.
 
   // Get information about the target being compiled for.
@@ -230,6 +233,8 @@ ASTUnit *ASTUnit::LoadFromCompilerInvocation(const CompilerInvocation &CI,
   // FIXME: Use the provided diagnostic client.
   AST.reset(new ASTUnit());
 
+  AST->OriginalSourceFile = Clang.getFrontendOpts().Inputs[0].second;
+
   // Create a file manager object to provide access to and cache the filesystem.
   Clang.setFileManager(&AST->getFileManager());