diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-03-27 01:25:19 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-03-27 01:25:19 +0000 |
commit | 35803282ef0282467fe1c09aa8284d734030dc3f (patch) | |
tree | 27a03e16bb7e33288b803bc3765be69293700b87 /lib/Lex | |
parent | 12fef490dce56bf8abc1bad7fec798eb882aabf7 (diff) |
[modules] Re-enable the "ambiguous expansion of macro" warning.
Also update "test/Modules/macros.c" to test modified semantics:
-When there is an ambiguous macro, expand using the latest introduced version, not the first one.
-#undefs in submodules cause the macro to not be exported by that submodule, it doesn't cause
undefining of macros in the translation unit that imported that submodule.
This reduces macro namespace interference across modules.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@178105 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Lex')
-rw-r--r-- | lib/Lex/PPMacroExpansion.cpp | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/lib/Lex/PPMacroExpansion.cpp b/lib/Lex/PPMacroExpansion.cpp index bb2634ffb6..21451f581f 100644 --- a/lib/Lex/PPMacroExpansion.cpp +++ b/lib/Lex/PPMacroExpansion.cpp @@ -211,7 +211,9 @@ bool Preprocessor::isNextPPTokenLParen() { /// expanded as a macro, handle it and return the next token as 'Identifier'. bool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier, MacroDirective *MD) { - MacroInfo *MI = MD->getMacroInfo(); + MacroDirective::DefInfo Def = MD->getDefinition(); + assert(Def.isValid()); + MacroInfo *MI = Def.getMacroInfo(); // If this is a macro expansion in the "#if !defined(x)" line for the file, // then the macro could expand to different things in other contexts, we need @@ -286,25 +288,22 @@ bool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier, } } - // FIXME: Temporarily disable this warning that is currently bogus with a PCH - // that redefined a macro without undef'ing it first (test/PCH/macro-redef.c). -#if 0 // If the macro definition is ambiguous, complain. - if (MI->isAmbiguous()) { + if (Def.getDirective()->isAmbiguous()) { Diag(Identifier, diag::warn_pp_ambiguous_macro) << Identifier.getIdentifierInfo(); Diag(MI->getDefinitionLoc(), diag::note_pp_ambiguous_macro_chosen) << Identifier.getIdentifierInfo(); - for (MacroInfo *PrevMI = MI->getPreviousDefinition(); - PrevMI && PrevMI->isDefined(); - PrevMI = PrevMI->getPreviousDefinition()) { - if (PrevMI->isAmbiguous()) { - Diag(PrevMI->getDefinitionLoc(), diag::note_pp_ambiguous_macro_other) + 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(); } } } -#endif // If we started lexing a macro, enter the macro expansion body. |