diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-03-01 00:08:04 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-03-01 00:08:04 +0000 |
commit | 49f906a36fdad83a9935d6f1815d620a7d0bf57a (patch) | |
tree | 8cd2c4e93b4c73e04c2af692c044eadb55c809ca /clang/lib/Lex/PPMacroExpansion.cpp | |
parent | 49133948a96617a67631c59d3158a8aa3463136c (diff) | |
download | bcm5719-llvm-49f906a36fdad83a9935d6f1815d620a7d0bf57a.tar.gz bcm5719-llvm-49f906a36fdad83a9935d6f1815d620a7d0bf57a.zip |
If a module A exports a macro M, and a module B imports that macro and #undef's
it, importers of B should not see the macro. This is complicated by the fact
that A's macro could also be visible through a different path. The rules (as
hashed out on cfe-commits) are included as a documentation update in this
change.
With this, the number of regressions in libc++'s testsuite when modules are
enabled drops from 47 to 7. Those remaining 7 are also macro-related, and are
due to remaining bugs in this change (in particular, the handling of submodules
is imperfect).
llvm-svn: 202560
Diffstat (limited to 'clang/lib/Lex/PPMacroExpansion.cpp')
-rw-r--r-- | clang/lib/Lex/PPMacroExpansion.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/clang/lib/Lex/PPMacroExpansion.cpp b/clang/lib/Lex/PPMacroExpansion.cpp index 721760afa0e..84f1ea5b1fa 100644 --- a/clang/lib/Lex/PPMacroExpansion.cpp +++ b/clang/lib/Lex/PPMacroExpansion.cpp @@ -293,11 +293,11 @@ bool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier, for (MacroDirective::DefInfo PrevDef = Def.getPreviousDefinition(); PrevDef && !PrevDef.isUndefined(); PrevDef = PrevDef.getPreviousDefinition()) { - if (PrevDef.getDirective()->isAmbiguous()) { - Diag(PrevDef.getMacroInfo()->getDefinitionLoc(), - diag::note_pp_ambiguous_macro_other) - << Identifier.getIdentifierInfo(); - } + Diag(PrevDef.getMacroInfo()->getDefinitionLoc(), + diag::note_pp_ambiguous_macro_other) + << Identifier.getIdentifierInfo(); + if (!PrevDef.getDirective()->isAmbiguous()) + break; } } |