diff options
author | Jan Svoboda <jan_svoboda@apple.com> | 2023-08-03 14:11:02 -0700 |
---|---|---|
committer | Jan Svoboda <jan_svoboda@apple.com> | 2023-08-03 15:09:52 -0700 |
commit | 243bc7504965b885c34487f358d2a4b4a355a6b5 (patch) | |
tree | 8b5b6b3f7508fdff33b0dfe8219505b34ebb1cd1 /clang/lib/Frontend/CompilerInvocation.cpp | |
parent | c5abddbf29de7eb83e6fcc3f1eac070da3fcc02f (diff) | |
download | llvm-243bc7504965b885c34487f358d2a4b4a355a6b5.zip llvm-243bc7504965b885c34487f358d2a4b4a355a6b5.tar.gz llvm-243bc7504965b885c34487f358d2a4b4a355a6b5.tar.bz2 |
[clang][cli] Accept option spelling as `Twine`
This will make it possible to accept the spelling as `StringLiteral` in D157029 and avoid some unnecessary allocations in a later patch.
Reviewed By: benlangmuir
Differential Revision: https://reviews.llvm.org/D157035
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 1fba91b..1e990f4 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -192,10 +192,12 @@ static std::optional<bool> normalizeSimpleNegativeFlag(OptSpecifier Opt, /// unnecessary template instantiations and just ignore it with a variadic /// argument. static void denormalizeSimpleFlag(SmallVectorImpl<const char *> &Args, - const char *Spelling, + const Twine &Spelling, CompilerInvocation::StringAllocator, Option::OptionClass, unsigned, /*T*/...) { - Args.push_back(Spelling); + // Spelling is already allocated or a static string, no need to call SA. + assert(*Spelling.getSingleStringRef().end() == '\0'); + Args.push_back(Spelling.getSingleStringRef().data()); } template <typename T> static constexpr bool is_uint64_t_convertible() { @@ -232,16 +234,19 @@ static auto makeBooleanOptionNormalizer(bool Value, bool OtherValue, } static auto makeBooleanOptionDenormalizer(bool Value) { - return [Value](SmallVectorImpl<const char *> &Args, const char *Spelling, + return [Value](SmallVectorImpl<const char *> &Args, const Twine &Spelling, CompilerInvocation::StringAllocator, Option::OptionClass, unsigned, bool KeyPath) { - if (KeyPath == Value) - Args.push_back(Spelling); + if (KeyPath == Value) { + // Spelling is already allocated or a static string, no need to call SA. + assert(*Spelling.getSingleStringRef().end() == '\0'); + Args.push_back(Spelling.getSingleStringRef().data()); + } }; } static void denormalizeStringImpl(SmallVectorImpl<const char *> &Args, - const char *Spelling, + const Twine &Spelling, CompilerInvocation::StringAllocator SA, Option::OptionClass OptClass, unsigned, const Twine &Value) { @@ -249,7 +254,9 @@ static void denormalizeStringImpl(SmallVectorImpl<const char *> &Args, case Option::SeparateClass: case Option::JoinedOrSeparateClass: case Option::JoinedAndSeparateClass: - Args.push_back(Spelling); + // Spelling is already allocated or a static string, no need to call SA. + assert(*Spelling.getSingleStringRef().end() == '\0'); + Args.push_back(Spelling.getSingleStringRef().data()); Args.push_back(SA(Value)); break; case Option::JoinedClass: @@ -264,7 +271,7 @@ static void denormalizeStringImpl(SmallVectorImpl<const char *> &Args, template <typename T> static void -denormalizeString(SmallVectorImpl<const char *> &Args, const char *Spelling, +denormalizeString(SmallVectorImpl<const char *> &Args, const Twine &Spelling, CompilerInvocation::StringAllocator SA, Option::OptionClass OptClass, unsigned TableIndex, T Value) { denormalizeStringImpl(Args, Spelling, SA, OptClass, TableIndex, Twine(Value)); @@ -309,7 +316,7 @@ static std::optional<unsigned> normalizeSimpleEnum(OptSpecifier Opt, } static void denormalizeSimpleEnumImpl(SmallVectorImpl<const char *> &Args, - const char *Spelling, + const Twine &Spelling, CompilerInvocation::StringAllocator SA, Option::OptionClass OptClass, unsigned TableIndex, unsigned Value) { @@ -326,7 +333,7 @@ static void denormalizeSimpleEnumImpl(SmallVectorImpl<const char *> &Args, template <typename T> static void denormalizeSimpleEnum(SmallVectorImpl<const char *> &Args, - const char *Spelling, + const Twine &Spelling, CompilerInvocation::StringAllocator SA, Option::OptionClass OptClass, unsigned TableIndex, T Value) { @@ -367,7 +374,7 @@ normalizeStringVector(OptSpecifier Opt, int, const ArgList &Args, } static void denormalizeStringVector(SmallVectorImpl<const char *> &Args, - const char *Spelling, + const Twine &Spelling, CompilerInvocation::StringAllocator SA, Option::OptionClass OptClass, unsigned TableIndex, |