]> granicus.if.org Git - clang/commitdiff
Reorganize built-in initialization to separate the creation of target builtins from...
authorDouglas Gregor <dgregor@apple.com>
Wed, 22 Apr 2009 04:56:28 +0000 (04:56 +0000)
committerDouglas Gregor <dgregor@apple.com>
Wed, 22 Apr 2009 04:56:28 +0000 (04:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69774 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/Builtins.h
lib/AST/ASTContext.cpp
lib/AST/Builtins.cpp
lib/Frontend/PCHReader.cpp

index 2eabd88927a1b4d57a55c924a42b0ea61f9c2ae2..9216029860d652ca987730b1fef7591c1cdbc2e8 100644 (file)
@@ -51,12 +51,15 @@ class Context {
   unsigned NumTSRecords;
 public:
   Context() : TSRecords(0), NumTSRecords(0) {}
-  
+
+  /// \brief Load all of the target builtins. This should be called
+  /// prior to initializing the builtin identifiers.
+  void InitializeTargetBuiltins(const TargetInfo &Target);
+
   /// InitializeBuiltins - Mark the identifiers for all the builtins with their
   /// appropriate builtin ID # and mark any non-portable builtin identifiers as
   /// such.
-  void InitializeBuiltins(IdentifierTable &Table, const TargetInfo &Target,
-                          bool NoBuiltins = false);
+  void InitializeBuiltins(IdentifierTable &Table, bool NoBuiltins = false);
   
   /// Builtin::GetName - Return the identifier name for the specified builtin,
   /// e.g. "__builtin_abs".
index f156ac458cf9eba5c046bc1462cb400b3074439e..02bedcaf78155b5a4c4c503bfe558900d841fea4 100644 (file)
@@ -41,7 +41,8 @@ ASTContext::ASTContext(const LangOptions& LOpts, SourceManager &SM,
   ExternalSource(0) {  
   if (size_reserve > 0) Types.reserve(size_reserve);    
   InitBuiltinTypes();
-  BuiltinInfo.InitializeBuiltins(idents, Target, LangOpts.NoBuiltin);
+  BuiltinInfo.InitializeTargetBuiltins(Target);
+  BuiltinInfo.InitializeBuiltins(idents, LangOpts.NoBuiltin);
   TUDecl = TranslationUnitDecl::Create(*this);
 }
 
index 97a40a4dd0b1489614df39752da825aac0f1c99d..ece9eeed76777a67eb53159f208fb2985e17aef7 100644 (file)
@@ -32,12 +32,16 @@ const Builtin::Info &Builtin::Context::GetRecord(unsigned ID) const {
   return TSRecords[ID - Builtin::FirstTSBuiltin];
 }
 
+/// \brief Load all of the target builtins. This must be called
+/// prior to initializing the builtin identifiers.
+void Builtin::Context::InitializeTargetBuiltins(const TargetInfo &Target) {
+  Target.getTargetBuiltins(TSRecords, NumTSRecords);
+}
 
 /// InitializeBuiltins - Mark the identifiers for all the builtins with their
 /// appropriate builtin ID # and mark any non-portable builtin identifiers as
 /// such.
 void Builtin::Context::InitializeBuiltins(IdentifierTable &Table,
-                                          const TargetInfo &Target,
                                           bool NoBuiltins) {
   // Step #1: mark all target-independent builtins with their ID's.
   for (unsigned i = Builtin::NotBuiltin+1; i != Builtin::FirstTSBuiltin; ++i)
@@ -45,10 +49,7 @@ void Builtin::Context::InitializeBuiltins(IdentifierTable &Table,
         (!NoBuiltins || !strchr(BuiltinInfo[i].Attributes, 'f')))
       Table.get(BuiltinInfo[i].Name).setBuiltinID(i);
   
-  // Step #2: Get target builtins.
-  Target.getTargetBuiltins(TSRecords, NumTSRecords);
-
-  // Step #3: Register target-specific builtins.
+  // Step #2: Register target-specific builtins.
   for (unsigned i = 0, e = NumTSRecords; i != e; ++i)
     if (!TSRecords[i].Suppressed &&
         (!NoBuiltins || 
index 6a6cd641202f92ce01f18753207976f0a7f0bd29..7018b26c2767e72a4aea4ad971a67e58a5ad8d7b 100644 (file)
@@ -1762,6 +1762,9 @@ PCHReader::PCHReadResult PCHReader::ReadPCH(const std::string &FileName) {
     if (Pos == IdTable->end())
       continue;
 
+    fprintf(stderr, "Looked up pre-allocated IdentifierInfo \"%s\"\n",
+            II->getName());
+
     // Dereferencing the iterator has the effect of populating the
     // IdentifierInfo node with the various declarations it needs.
     (void)*Pos;