From: Daniel Dunbar Date: Mon, 21 Sep 2009 03:03:56 +0000 (+0000) Subject: Switch ProcessASTInputFile to still use ParseAST. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a674bf437ea0f85f2ffdab20df591a6c410c63ed;p=clang 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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82432 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/Frontend/ast-codegen.c b/test/Frontend/ast-codegen.c index 795be92a24..1fe74d4fbe 100644 --- a/test/Frontend/ast-codegen.c +++ b/test/Frontend/ast-codegen.c @@ -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() { +} diff --git a/tools/clang-cc/clang-cc.cpp b/tools/clang-cc/clang-cc.cpp index 6c2f1d6d07..3e7c026270 100644 --- a/tools/clang-cc/clang-cc.cpp +++ b/tools/clang-cc/clang-cc.cpp @@ -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, ""); + 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.