llvm-project/clang/lib/Lex
Richard Smith 4971ed0fea [modules] Simplify module macro handling in non-local-submodule-visibility mode.
When reaching the end of a module, we used to convert its macros to
ModuleMacros but also leave them in the MacroDirective chain for the
identifier. This meant that every lookup of such a macro would find two
(identical) definitions. It also made it difficult to determine the correct
owner for a macro when reaching the end of a module: the most recent
MacroDirective in the chain could be from an #included submodule rather than
the current module.

Simplify this: whenever we convert a MacroDirective to a ModuleMacro when
leaving a module, clear out the MacroDirective chain for that identifier, and
just rely on the ModuleMacro to provide the macro definition information.

(We don't want to do this for local submodule visibility mode, because in that
mode we maintain a distinct MacroDirective chain for each submodule, and we
need to keep around the prior MacroDirective in case we re-enter the submodule
-- for instance, if its header is #included more than once in a module build,
we need the include guard directive to stick around. But the problem doesn't
arise in this case for the same reason: each submodule has its own
MacroDirective chain, so the macros don't leak out of submodules in the first
place.)


This reinstates r302932, reverted in r302947, with a fix for a bug that
resulted in us sometimes losing macro definitions due to failing to clear out
the overridden module macro list when promoting a directive to a module macro.

llvm-svn: 303468
2017-05-19 23:32:38 +00:00
..
CMakeLists.txt
HeaderMap.cpp Use StringRef for MemoryBuffer identifier API (NFC) 2016-10-01 16:38:28 +00:00
HeaderSearch.cpp Add support for building modules from preprocessed source. 2017-05-05 22:18:51 +00:00
Lexer.cpp [Lexer] Ensure that the token is not an annotation token when 2017-05-17 11:08:36 +00:00
LiteralSupport.cpp Allow lexer to handle string_view literals. Patch from Anton Bikineev. 2016-12-30 04:51:10 +00:00
MacroArgs.cpp [modules] Stop trying to fake up a linear MacroDirective history. 2015-04-29 23:20:19 +00:00
MacroInfo.cpp Remove unused tracking of owning module for MacroInfo objects. 2017-05-12 23:40:52 +00:00
ModuleMap.cpp [Modules] Allow umbrella frameworks to define private submodules for subframeworks 2017-05-09 00:41:38 +00:00
PPCaching.cpp [Preprocessor] Fix incorrect token caching that occurs when lexing _Pragma 2017-02-24 17:45:16 +00:00
PPCallbacks.cpp
PPConditionalDirectiveRecord.cpp Switch PPCallbacks to take the new MacroDefinition instead of MacroDirective*, in order to preserve full information on module macro expansion. 2015-05-04 03:15:40 +00:00
PPDirectives.cpp Remove unused tracking of owning module for MacroInfo objects. 2017-05-12 23:40:52 +00:00
PPExpressions.cpp Fix some Clang-tidy modernize-use-using and Include What You Use warnings; other minor fixes. 2016-09-07 21:53:17 +00:00
PPLexerChange.cpp [modules] Simplify module macro handling in non-local-submodule-visibility mode. 2017-05-19 23:32:38 +00:00
PPMacroExpansion.cpp Add #pragma clang module begin/end pragmas and generate them when preprocessing a module. 2017-05-04 00:29:54 +00:00
PTHLexer.cpp Turn FileManager DirectoryEntry::Name from raw pointer to StringRef (NFC) 2016-10-11 07:31:29 +00:00
Pragma.cpp Permit keywords in module names in #pragma clang module *. 2017-05-05 22:34:07 +00:00
PreprocessingRecord.cpp Revert "Revert "PPCallbacks::MacroUndefined, change signature and add test."" 2017-04-26 21:05:44 +00:00
Preprocessor.cpp Remove unused tracking of owning module for MacroInfo objects. 2017-05-12 23:40:52 +00:00
PreprocessorLexer.cpp
ScratchBuffer.cpp MSan told me that we actually dump the entire scratch buffer into PCH files, initialize it. 2015-04-06 20:01:49 +00:00
TokenConcatenation.cpp [PP] Replace some index based for loops with range based ones 2016-10-26 13:06:13 +00:00
TokenLexer.cpp Fix whitespace before token-paste of an argument. 2017-05-04 21:31:17 +00:00
UnicodeCharSets.h