[clang] [Clang] Consider reachability for file-scope warnings on initializers (PR #163885)
Yanzuo Liu via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 17 07:53:45 PDT 2025
================
@@ -5223,10 +5223,31 @@ class Parser : public CodeCompletionHandler {
/// assignment-expression
/// '{' ...
/// \endverbatim
- ExprResult ParseInitializer() {
- if (Tok.isNot(tok::l_brace))
- return ParseAssignmentExpression();
- return ParseBraceInitializer();
+ ExprResult ParseInitializer(Decl *DeclForInitializer = nullptr) {
+ // Set DeclForInitializer for file-scope variables.
+ // For constexpr references, set it to suppress runtime warnings.
+ // For non-constexpr references, don't set it to avoid evaluation issues
+ // with self-referencing initializers. Local variables (including local
+ // constexpr) should emit runtime warnings.
+ if (DeclForInitializer && !Actions.ExprEvalContexts.empty()) {
+ if (auto *VD = dyn_cast<VarDecl>(DeclForInitializer)) {
+ if (VD->isFileVarDecl()) {
+ if (!VD->getType()->isReferenceType() || VD->isConstexpr()) {
----------------
zwuis wrote:
```cpp
if (auto *VD = ...;
VD && ...) {
```
https://github.com/llvm/llvm-project/pull/163885
More information about the cfe-commits
mailing list