[PATCH] D83211: Factor out call to EXTRACTOR in generateCC1CommandLine
Jan Svoboda via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Nov 16 01:51:56 PST 2020
jansvoboda11 updated this revision to Diff 305437.
jansvoboda11 added a comment.
Rebase and add documenting possible reference lifetime extension issue
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D83211/new/
https://reviews.llvm.org/D83211
Files:
clang/lib/Frontend/CompilerInvocation.cpp
Index: clang/lib/Frontend/CompilerInvocation.cpp
===================================================================
--- clang/lib/Frontend/CompilerInvocation.cpp
+++ clang/lib/Frontend/CompilerInvocation.cpp
@@ -236,6 +236,9 @@
return KeyPath | Value;
}
+// The value returned by an extractor is stored as a constant reference.
+// Watch out for missed reference lifetime extension.
+
template <typename T> static T extractForwardValue(T KeyPath) {
return KeyPath;
}
@@ -4040,9 +4043,10 @@
PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \
TYPE, 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 = EXTRACTOR(this->KEYPATH); \
+ if (ALWAYS_EMIT || Extracted != (DEFAULT_VALUE)) \
+ DENORMALIZER(Args, SPELLING, SA, TABLE_INDEX, Extracted); \
}
#define OPTION_WITH_MARSHALLING_BOOLEAN( \
@@ -4050,10 +4054,10 @@
HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \
TYPE, 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) { \
+ const auto &Extracted = EXTRACTOR(this->KEYPATH); \
+ if (ALWAYS_EMIT || Extracted != (DEFAULT_VALUE)) \
+ DENORMALIZER(Args, SPELLING, NEG_SPELLING, SA, TABLE_INDEX, Extracted); \
}
#include "clang/Driver/Options.inc"
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D83211.305437.patch
Type: text/x-patch
Size: 2381 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201116/3982ee3a/attachment.bin>
More information about the cfe-commits
mailing list