llvm/llvm-project
在 GitHub 查看`[[gnu::weak]]` disables constant evaluation of constexpr variables in C++14
Open
#141,797 建立於 2025年5月28日
c++11c++14clang:frontenddiverges-from:gccgood first issue
倉庫指標
- Star
- (26,378 star)
- PR 合併指標
- (平均合併 1天 2小時) (30 天內合併 1,000 個 PR)
描述
GCC and Clang disagree on their handling of [[gnu::weak]] before C++17 https://gcc.godbolt.org/z/s7q67vqjz
struct S { static constexpr int var = 0; };
[[gnu::weak]] constexpr int S::var;
static constexpr int usage = S::var;
While it would be unsafe to constant-fold this code, it should be fine to constant-evaluate it, for consistency with GCC
In static bool evaluateVarDeclInit (ExprConstant.cpp), and in static bool CheckWeak (Interp.cpp), we should allow constant evaluation -without diagnostics, but not constant folding) - by looking at Info.EvalMode