r329866 - Lex: make `clang::Preprocessor::macros` work on MSVC
Saleem Abdulrasool via cfe-commits
cfe-commits at lists.llvm.org
Wed Apr 11 16:47:25 PDT 2018
Author: compnerd
Date: Wed Apr 11 16:47:25 2018
New Revision: 329866
URL: http://llvm.org/viewvc/llvm-project?rev=329866&view=rev
Log:
Lex: make `clang::Preprocessor::macros` work on MSVC
The order of argument construction is reversed on MS ABI on Windows.
When `macros` was invoked, the `end` call is made prior to `begin`. In
such a case, the DenseMap (`ModuleMap`) is populated after the `end`
iterator is constructed. This reversal results in the invalidation of
the end iterator, resulting in a failure at runtime (assertion failure
in `DenseMap<T>::operator!=` that "handles are not in sync!"). Ensure
that the end iterator is constructed after the begin iterator. This
fixes the use of `macros(bool)`, which symptomized as an assertion
failure in the swift compiler in the clang importer.
Modified:
cfe/trunk/include/clang/Lex/Preprocessor.h
Modified: cfe/trunk/include/clang/Lex/Preprocessor.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/Preprocessor.h?rev=329866&r1=329865&r2=329866&view=diff
==============================================================================
--- cfe/trunk/include/clang/Lex/Preprocessor.h (original)
+++ cfe/trunk/include/clang/Lex/Preprocessor.h Wed Apr 11 16:47:25 2018
@@ -1041,12 +1041,14 @@ public:
macro_iterator macro_begin(bool IncludeExternalMacros = true) const;
macro_iterator macro_end(bool IncludeExternalMacros = true) const;
- llvm::iterator_range<macro_iterator>
+ llvm::iterator_range<macro_iterator>
macros(bool IncludeExternalMacros = true) const {
- return llvm::make_range(macro_begin(IncludeExternalMacros),
- macro_end(IncludeExternalMacros));
+ macro_iterator begin = macro_begin(IncludeExternalMacros);
+ macro_iterator end = macro_end(IncludeExternalMacros);
+ return llvm::make_range(begin, end);
}
+
/// \}
/// \brief Return the name of the macro defined before \p Loc that has
More information about the cfe-commits
mailing list