[cfe-commits] r139745 - in /cfe/trunk: lib/Serialization/ASTWriter.cpp test/Modules/macros.c
Douglas Gregor
dgregor at apple.com
Wed Sep 14 15:14:14 PDT 2011
Author: dgregor
Date: Wed Sep 14 17:14:14 2011
New Revision: 139745
URL: http://llvm.org/viewvc/llvm-project?rev=139745&view=rev
Log:
Don't try to write a macro offset for an identifier that names a non-exported macro, for real this time
Modified:
cfe/trunk/lib/Serialization/ASTWriter.cpp
cfe/trunk/test/Modules/macros.c
Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=139745&r1=139744&r2=139745&view=diff
==============================================================================
--- cfe/trunk/lib/Serialization/ASTWriter.cpp (original)
+++ cfe/trunk/lib/Serialization/ASTWriter.cpp Wed Sep 14 17:14:14 2011
@@ -2223,24 +2223,23 @@
/// 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 = PP.getMacroInfo(II)))
- return Macro->isExported();
+ if (Macro || (Macro = PP.getMacroInfo(II)))
+ return !Macro->isBuiltinMacro() && (!IsModule || Macro->isExported());
- return false;
+ return false;
}
public:
@@ -2261,11 +2260,10 @@
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;
+ MacroInfo *Macro = 0;
if (isInterestingIdentifier(II, Macro)) {
DataLen += 2; // 2 bytes for builtin ID, flags
- if (II->hasMacroDefinition() &&
- !PP.getMacroInfo(const_cast<IdentifierInfo *>(II))->isBuiltinMacro())
+ if (hasMacroDefinition(II, Macro))
DataLen += 4;
for (IdentifierResolver::iterator D = IdentifierResolver::begin(II),
DEnd = IdentifierResolver::end();
@@ -2290,7 +2288,7 @@
void EmitData(raw_ostream& Out, IdentifierInfo* II,
IdentID ID, unsigned) {
- MacroInfo *Macro;
+ MacroInfo *Macro = 0;
if (!isInterestingIdentifier(II, Macro)) {
clang::io::Emit32(Out, ID << 1);
return;
@@ -2298,18 +2296,16 @@
clang::io::Emit32(Out, (ID << 1) | 0x01);
uint32_t Bits = 0;
- bool hasMacroDefinition
- = II->hasMacroDefinition() &&
- (Macro || (Macro = PP.getMacroInfo(II))) && !Macro->isBuiltinMacro();
+ bool HasMacroDefinition = hasMacroDefinition(II, Macro);
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
Modified: cfe/trunk/test/Modules/macros.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/macros.c?rev=139745&r1=139744&r2=139745&view=diff
==============================================================================
--- cfe/trunk/test/Modules/macros.c (original)
+++ cfe/trunk/test/Modules/macros.c Wed Sep 14 17:14:14 2011
@@ -9,6 +9,8 @@
#__export_macro__ INTEGER
#__export_macro__ DOUBLE
+int (INTEGER);
+
#else
__import_module__ macros;
@@ -30,4 +32,7 @@
#__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
More information about the cfe-commits
mailing list