aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorJan Svoboda <jan_svoboda@apple.com>2020-11-20 10:26:07 +0100
committerJan Svoboda <jan_svoboda@apple.com>2020-12-01 09:24:04 +0100
commit973843681b9df4ba9303e98f7b4531ba31c2b1bf (patch)
treeb0927114d71952d64671fa137e22d4e2d4d066ea /clang/lib/Frontend/CompilerInvocation.cpp
parent424fdbc3dedadf882fda107aa5638b39e7036c4d (diff)
downloadllvm-973843681b9df4ba9303e98f7b4531ba31c2b1bf.zip
llvm-973843681b9df4ba9303e98f7b4531ba31c2b1bf.tar.gz
llvm-973843681b9df4ba9303e98f7b4531ba31c2b1bf.tar.bz2
[clang][cli] Factor out call to EXTRACTOR in generateCC1CommandLine (NFC)
Reviewed By: Bigcheese, dexonsmith Original patch by Daniel Grumberg. Differential Revision: https://reviews.llvm.org/D83211
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r--clang/lib/Frontend/CompilerInvocation.cpp18
1 files changed, 11 insertions, 7 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index a2dec66..35cd1a4 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -4062,13 +4062,17 @@ std::string CompilerInvocation::getModuleHash() const {
void CompilerInvocation::generateCC1CommandLine(
SmallVectorImpl<const char *> &Args, StringAllocator SA) const {
+ // Capture the extracted value as a lambda argument to avoid potential issues
+ // with lifetime extension of the reference.
#define OPTION_WITH_MARSHALLING( \
PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \
NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \
- if (((FLAGS) & options::CC1Option) && \
- (ALWAYS_EMIT || EXTRACTOR(this->KEYPATH) != (DEFAULT_VALUE))) { \
- DENORMALIZER(Args, SPELLING, SA, TABLE_INDEX, EXTRACTOR(this->KEYPATH)); \
+ if ((FLAGS)&options::CC1Option) { \
+ [&](const auto &Extracted) { \
+ if (ALWAYS_EMIT || Extracted != (DEFAULT_VALUE)) \
+ DENORMALIZER(Args, SPELLING, SA, TABLE_INDEX, Extracted); \
+ }(EXTRACTOR(this->KEYPATH)); \
}
#define OPTION_WITH_MARSHALLING_BOOLEAN( \
@@ -4076,10 +4080,10 @@ void CompilerInvocation::generateCC1CommandLine(
HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \
NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX, NEG_ID, \
NEG_SPELLING) \
- if (((FLAGS)&options::CC1Option) && \
- (ALWAYS_EMIT || EXTRACTOR(this->KEYPATH) != DEFAULT_VALUE)) { \
- DENORMALIZER(Args, SPELLING, NEG_SPELLING, SA, TABLE_INDEX, \
- EXTRACTOR(this->KEYPATH)); \
+ if ((FLAGS)&options::CC1Option) { \
+ bool Extracted = EXTRACTOR(this->KEYPATH); \
+ if (ALWAYS_EMIT || Extracted != (DEFAULT_VALUE)) \
+ DENORMALIZER(Args, SPELLING, NEG_SPELLING, SA, TABLE_INDEX, Extracted); \
}
#include "clang/Driver/Options.inc"