[cfe-commits] r166195 - in /cfe/trunk: include/clang/Serialization/ASTBitCodes.h lib/Serialization/ASTReader.cpp lib/Serialization/ASTWriter.cpp

Douglas Gregor dgregor at apple.com
Thu Oct 18 10:58:09 PDT 2012


Author: dgregor
Date: Thu Oct 18 12:58:09 2012
New Revision: 166195

URL: http://llvm.org/viewvc/llvm-project?rev=166195&view=rev
Log:
Split the target options out into their own record within the AST
file's control block.

Modified:
    cfe/trunk/include/clang/Serialization/ASTBitCodes.h
    cfe/trunk/lib/Serialization/ASTReader.cpp
    cfe/trunk/lib/Serialization/ASTWriter.cpp

Modified: cfe/trunk/include/clang/Serialization/ASTBitCodes.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTBitCodes.h?rev=166195&r1=166194&r2=166195&view=diff
==============================================================================
--- cfe/trunk/include/clang/Serialization/ASTBitCodes.h (original)
+++ cfe/trunk/include/clang/Serialization/ASTBitCodes.h Thu Oct 18 12:58:09 2012
@@ -242,20 +242,23 @@
       /// actually important to check.
       LANGUAGE_OPTIONS = 3,
 
+      /// \brief Record code for the target options table.
+      TARGET_OPTIONS = 4,
+
       /// \brief Record code for the original file that was used to
       /// generate the AST file.
-      ORIGINAL_FILE_NAME = 4,
+      ORIGINAL_FILE_NAME = 5,
 
       /// \brief Record code for the file ID of the original file used to 
       /// generate the AST file.
-      ORIGINAL_FILE_ID = 5,
+      ORIGINAL_FILE_ID = 6,
       
       /// \brief The directory that the PCH was originally created in.
-      ORIGINAL_PCH_DIR = 6,
+      ORIGINAL_PCH_DIR = 7,
 
       /// \brief Record code for the version control branch and revision
       /// information of the compiler used to build this AST file.
-      VERSION_CONTROL_BRANCH_REVISION = 7
+      VERSION_CONTROL_BRANCH_REVISION = 8
     };
 
     /// \brief Record types that occur within the AST block itself.

Modified: cfe/trunk/lib/Serialization/ASTReader.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=166195&r1=166194&r2=166195&view=diff
==============================================================================
--- cfe/trunk/lib/Serialization/ASTReader.cpp (original)
+++ cfe/trunk/lib/Serialization/ASTReader.cpp Thu Oct 18 12:58:09 2012
@@ -1800,24 +1800,6 @@
       }
 
       RelocatablePCH = Record[4];
-      if (Listener && &F == *ModuleMgr.begin()) {
-        unsigned Idx = 6;
-        TargetOptions TargetOpts;
-        TargetOpts.Triple = ReadString(Record, Idx);
-        TargetOpts.CPU = ReadString(Record, Idx);
-        TargetOpts.ABI = ReadString(Record, Idx);
-        TargetOpts.CXXABI = ReadString(Record, Idx);
-        TargetOpts.LinkerVersion = ReadString(Record, Idx);
-        for (unsigned N = Record[Idx++]; N; --N) {
-          TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
-        }
-        for (unsigned N = Record[Idx++]; N; --N) {
-          TargetOpts.Features.push_back(ReadString(Record, Idx));
-        }
-
-        if (Listener->ReadTargetOptions(F, TargetOpts))
-          return IgnorePCH;
-      }
       break;
     }
 
@@ -1849,6 +1831,28 @@
         return IgnorePCH;
       break;
 
+    case TARGET_OPTIONS: {
+      if (Listener && &F == *ModuleMgr.begin()) {
+        unsigned Idx = 0;
+        TargetOptions TargetOpts;
+        TargetOpts.Triple = ReadString(Record, Idx);
+        TargetOpts.CPU = ReadString(Record, Idx);
+        TargetOpts.ABI = ReadString(Record, Idx);
+        TargetOpts.CXXABI = ReadString(Record, Idx);
+        TargetOpts.LinkerVersion = ReadString(Record, Idx);
+        for (unsigned N = Record[Idx++]; N; --N) {
+          TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
+        }
+        for (unsigned N = Record[Idx++]; N; --N) {
+          TargetOpts.Features.push_back(ReadString(Record, Idx));
+        }
+
+        if (Listener->ReadTargetOptions(F, TargetOpts))
+          return IgnorePCH;
+      }
+      break;
+    }
+
     case ORIGINAL_FILE_NAME:
       // Only record from the primary AST file.
       if (&F == *ModuleMgr.begin()) {

Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=166195&r1=166194&r2=166195&view=diff
==============================================================================
--- cfe/trunk/lib/Serialization/ASTWriter.cpp (original)
+++ cfe/trunk/lib/Serialization/ASTWriter.cpp Thu Oct 18 12:58:09 2012
@@ -994,19 +994,6 @@
   Record.push_back(CLANG_VERSION_MINOR);
   Record.push_back(!isysroot.empty());
   Record.push_back(ASTHasCompilerErrors);
-  AddString(TargetOpts.Triple, Record);
-  AddString(TargetOpts.CPU, Record);
-  AddString(TargetOpts.ABI, Record);
-  AddString(TargetOpts.CXXABI, Record);
-  AddString(TargetOpts.LinkerVersion, Record);
-  Record.push_back(TargetOpts.FeaturesAsWritten.size());
-  for (unsigned I = 0, N = TargetOpts.FeaturesAsWritten.size(); I != N; ++I) {
-    AddString(TargetOpts.FeaturesAsWritten[I], Record);
-  }
-  Record.push_back(TargetOpts.Features.size());
-  for (unsigned I = 0, N = TargetOpts.Features.size(); I != N; ++I) {
-    AddString(TargetOpts.Features[I], Record);
-  }
   Stream.EmitRecord(METADATA, Record);
 
   // Imports
@@ -1047,6 +1034,23 @@
   Record.append(LangOpts.CurrentModule.begin(), LangOpts.CurrentModule.end());
   Stream.EmitRecord(LANGUAGE_OPTIONS, Record);
 
+  // Target options.
+  Record.clear();
+  AddString(TargetOpts.Triple, Record);
+  AddString(TargetOpts.CPU, Record);
+  AddString(TargetOpts.ABI, Record);
+  AddString(TargetOpts.CXXABI, Record);
+  AddString(TargetOpts.LinkerVersion, Record);
+  Record.push_back(TargetOpts.FeaturesAsWritten.size());
+  for (unsigned I = 0, N = TargetOpts.FeaturesAsWritten.size(); I != N; ++I) {
+    AddString(TargetOpts.FeaturesAsWritten[I], Record);
+  }
+  Record.push_back(TargetOpts.Features.size());
+  for (unsigned I = 0, N = TargetOpts.Features.size(); I != N; ++I) {
+    AddString(TargetOpts.Features[I], Record);
+  }
+  Stream.EmitRecord(TARGET_OPTIONS, Record);
+
   // Original file name and file ID
   SourceManager &SM = Context.getSourceManager();
   if (const FileEntry *MainFile = SM.getFileEntryForID(SM.getMainFileID())) {





More information about the cfe-commits mailing list