Switch ProcessASTInputFile to still use ParseAST.

- Currently this requires us to fake an input file.

 - This allows Sema to be keep all the logic for how to pull decls out of the external AST source and how to handle things like tentative definitions.

llvm-svn: 82432
This commit is contained in:
Daniel Dunbar 2009-09-21 03:03:56 +00:00
parent b7bbfdd9e6
commit 26e37a77c6
2 changed files with 17 additions and 7 deletions

View File

@ -3,3 +3,10 @@
// CHECK: module asm "foo"
__asm__("foo");
// CHECK: @g0 = common global i32 0, align 4
int g0;
// CHECK: define i32 @f0()
int f0() {
}

View File

@ -2181,14 +2181,17 @@ static void ProcessASTInputFile(const std::string &InFile, ProgActions PA,
return;
}
// Stream the input AST to the consumer.
Consumer->Initialize(AST->getASTContext());
AST->getASTContext()
.getExternalSource()->StartTranslationUnit(Consumer.get());
Consumer->HandleTranslationUnit(AST->getASTContext());
// Set the main file ID to an empty file.
//
// FIXME: We probably shouldn't need this, but for now this is the simplest
// way to reuse the logic in ParseAST.
const char *EmptyStr = "";
llvm::MemoryBuffer *SB =
llvm::MemoryBuffer::getMemBuffer(EmptyStr, EmptyStr, "<dummy input>");
AST->getSourceManager().createMainFileIDForMemBuffer(SB);
// FIXME: Tentative decls and #pragma weak aren't going to get handled
// correctly here.
// Stream the input AST to the consumer.
ParseAST(PP, Consumer.get(), AST->getASTContext(), Stats);
// Release the consumer and the AST, in that order since the consumer may
// perform actions in its destructor which require the context.