Stop assuming CFSTR
is a constant-time expression with Clang 15
#4872
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
From Clang 15, nested static initializer inside statement-expression is no longer a constant-time expression (See https://reviews.llvm.org/D127201). OSS Foundation defines
CFSTR
as a macro rather than__builtin___CFStringMakeConstantString
and it uses nested static initializer inside statement-expression, so we can't assumeCFSTR
itself is always a constant-time expression.This patch removes some
static
qualifiers associated withCFSTR
to make them acceptable with Clang 15 and later.I confirmed there is no change at LLVM IR level between before/after this patch with Clang 14 and
-O3
, so I assume Clang 15 and later also can optimize those non-static variables to be static global rodata. So this fix does not cause any performance regression.This issue was originally found in #4866 (comment)