[clang] Make sure argument expansion locations are correct in presence of predefined...
authorKadir Cetinkaya <kadircet@google.com>
Wed, 22 Apr 2020 14:37:27 +0000 (16:37 +0200)
committerKadir Cetinkaya <kadircet@google.com>
Wed, 22 Apr 2020 19:01:52 +0000 (21:01 +0200)
commit411a254af3ff5dd05e6c522cc7bccdf043967070
tree3f28072a7932a2a48c4e9462a9be964967cdd6a6
parent7d1ee639cb9efea364bec90afe4d1161ec624a7f
[clang] Make sure argument expansion locations are correct in presence of predefined buffer

Summary:
Macro argument expansion logic relies on skipping file IDs that created
as a result of an include. Unfortunately it fails to do that for
predefined buffer since it doesn't have a valid insertion location.

As a result of that any file ID created for an include inside the
predefined buffers breaks the traversal logic in
SourceManager::computeMacroArgsCache.

To fix this issue we first record number of created FIDs for predefined
buffer, and then skip them explicitly in source manager.

Another solution would be to just give predefined buffers a valid source
location, but it is unclear where that should be..

Reviewers: sammccall

Subscribers: cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D78649
clang/lib/Basic/SourceManager.cpp
clang/lib/Lex/PPLexerChange.cpp
clang/unittests/Basic/SourceManagerTest.cpp
clang/unittests/Lex/LexerTest.cpp