Author: Jan Svoboda Date: 2020-12-01T09:24:04+01:00 New Revision: 973843681b9df4ba9303e98f7b4531ba31c2b1bf
URL: https://github.com/llvm/llvm-project/commit/973843681b9df4ba9303e98f7b4531ba31c2b1bf DIFF: https://github.com/llvm/llvm-project/commit/973843681b9df4ba9303e98f7b4531ba31c2b1bf.diff LOG: [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 Added: Modified: clang/lib/Frontend/CompilerInvocation.cpp Removed: ################################################################################ diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index a2dec66692bb..35cd1a4f949e 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" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits