]> granicus.if.org Git - clang/commitdiff
Revert my exported-macro hackery. Something is amiss
authorDouglas Gregor <dgregor@apple.com>
Wed, 14 Sep 2011 20:57:14 +0000 (20:57 +0000)
committerDouglas Gregor <dgregor@apple.com>
Wed, 14 Sep 2011 20:57:14 +0000 (20:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139734 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Serialization/ASTWriter.cpp
test/Modules/macros.c

index 657c5ed29f898e7de7e62d1d10c997b6d1f7e6fe..28a69d4bdbb9219b0e4cfb5b1e5f905433376dd5 100644 (file)
@@ -2223,26 +2223,24 @@ class ASTIdentifierTableTrait {
   /// that needs a full IdentifierInfo structure written into the hash
   /// table.
   bool isInterestingIdentifier(IdentifierInfo *II, MacroInfo *&Macro) {
+    Macro = 0;
+    
     if (II->isPoisoned() ||
         II->isExtensionToken() ||
         II->getObjCOrBuiltinID() ||
         II->getFETokenInfo<void>())
       return true;
 
-    return hasMacroDefinition(II, Macro);
-  }
-  
-  bool hasMacroDefinition(IdentifierInfo *II, MacroInfo *&Macro) {
     if (!II->hasMacroDefinition())
       return false;
     
     if (!IsModule)
       return true;
     
-    if (Macro || (Macro = PP.getMacroInfo(II)))
+    if ((Macro = PP.getMacroInfo(II)))
       return Macro->isExported();
     
-    return false;    
+    return false;
   }
 
 public:
@@ -2263,10 +2261,11 @@ public:
     EmitKeyDataLength(raw_ostream& Out, IdentifierInfo* II, IdentID ID) {
     unsigned KeyLen = II->getLength() + 1;
     unsigned DataLen = 4; // 4 bytes for the persistent ID << 1
-    MacroInfo *Macro = 0;
+    MacroInfo *Macro;
     if (isInterestingIdentifier(II, Macro)) {
       DataLen += 2; // 2 bytes for builtin ID, flags
-      if (hasMacroDefinition(const_cast<IdentifierInfo *>(II), Macro))
+      if (II->hasMacroDefinition() &&
+          !PP.getMacroInfo(const_cast<IdentifierInfo *>(II))->isBuiltinMacro())
         DataLen += 4;
       for (IdentifierResolver::iterator D = IdentifierResolver::begin(II),
                                      DEnd = IdentifierResolver::end();
@@ -2291,7 +2290,7 @@ public:
 
   void EmitData(raw_ostream& Out, IdentifierInfo* II,
                 IdentID ID, unsigned) {
-    MacroInfo *Macro = 0;
+    MacroInfo *Macro;
     if (!isInterestingIdentifier(II, Macro)) {
       clang::io::Emit32(Out, ID << 1);
       return;
@@ -2299,16 +2298,18 @@ public:
 
     clang::io::Emit32(Out, (ID << 1) | 0x01);
     uint32_t Bits = 0;
-    bool HasMacroDefinition = hasMacroDefinition(II, Macro);
+    bool hasMacroDefinition 
+      = II->hasMacroDefinition() && 
+        (Macro || (Macro = PP.getMacroInfo(II))) && !Macro->isBuiltinMacro();
     Bits = (uint32_t)II->getObjCOrBuiltinID();
-    Bits = (Bits << 1) | unsigned(HasMacroDefinition);
+    Bits = (Bits << 1) | unsigned(hasMacroDefinition);
     Bits = (Bits << 1) | unsigned(II->isExtensionToken());
     Bits = (Bits << 1) | unsigned(II->isPoisoned());
     Bits = (Bits << 1) | unsigned(II->hasRevertedTokenIDToIdentifier());
     Bits = (Bits << 1) | unsigned(II->isCPlusPlusOperatorKeyword());
     clang::io::Emit16(Out, Bits);
 
-    if (HasMacroDefinition)
+    if (hasMacroDefinition)
       clang::io::Emit32(Out, Writer.getMacroOffset(II));
 
     // Emit the declaration IDs in reverse order, because the
index 8fefe7a9cffc24e8db537552e9f9747caa2ffa11..578e09fbda4f287b7de8bedb0afc59283a8ffc2b 100644 (file)
@@ -9,8 +9,6 @@
 #__export_macro__ INTEGER
 #__export_macro__ DOUBLE
 
-int (INTEGER);
-
 #else
 
 __import_module__ macros;
@@ -32,7 +30,4 @@ DOUBLE *dp = &d;
 
 #__export_macro__ WIBBLE // expected-error{{no macro named 'WIBBLE' to export}}
 
-void f() {
-  int i = INTEGER; // the value was exported, the macro was not.
-}
 #endif