[clang-tools-extra] [clang-tidy] Avoid evaluating value-dependent static initializers in fuchsia-statically-constructed-objects (PR #201287)

2026-06-03 Thread Zeyi Xu via cfe-commits

https://github.com/zeyi2 closed https://github.com/llvm/llvm-project/pull/201287
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Avoid evaluating value-dependent static initializers in fuchsia-statically-constructed-objects (PR #201287)

2026-06-03 Thread Zeyi Xu via cfe-commits

zeyi2 wrote:

No crash found now, so I'm landing this.

https://github.com/clang-tidy-infra/CTIT/issues/140#issuecomment-4610299847

https://github.com/llvm/llvm-project/pull/201287
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Avoid evaluating value-dependent static initializers in fuchsia-statically-constructed-objects (PR #201287)

2026-06-03 Thread Baranov Victor via cfe-commits

https://github.com/vbvictor approved this pull request.


https://github.com/llvm/llvm-project/pull/201287
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Avoid evaluating value-dependent static initializers in fuchsia-statically-constructed-objects (PR #201287)

2026-06-03 Thread Baranov Victor via cfe-commits


@@ -13,8 +13,9 @@ using namespace clang::ast_matchers;
 namespace clang::tidy::fuchsia {
 
 namespace {
-AST_MATCHER(Expr, isConstantInitializer) {
-  return Node.isConstantInitializer(Finder->getASTContext(), false);
+AST_MATCHER(Expr, isConstantOrValueDependentInitializer) {
+  return Node.isValueDependent() ||

vbvictor wrote:

I'd make a separate matcher for ValueDependent, I think we already have 
`isValueDependent` in https://clang.llvm.org/docs/LibASTMatchersReference.html.

https://github.com/llvm/llvm-project/pull/201287
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Avoid evaluating value-dependent static initializers in fuchsia-statically-constructed-objects (PR #201287)

2026-06-03 Thread via cfe-commits

llvmorg-github-actions[bot] wrote:




@llvm/pr-subscribers-clang-tidy

Author: Zeyi Xu (zeyi2)


Changes

Static data member initializers in class templates could crash the check when 
they used non-type template parameters. This commit skips them during analysis.

Closes https://github.com/llvm/llvm-project/issues/201110

---
Full diff: https://github.com/llvm/llvm-project/pull/201287.diff


3 Files Affected:

- (modified) 
clang-tools-extra/clang-tidy/fuchsia/StaticallyConstructedObjectsCheck.cpp 
(+5-4) 
- (modified) clang-tools-extra/docs/ReleaseNotes.rst (+4) 
- (modified) 
clang-tools-extra/test/clang-tidy/checkers/fuchsia/statically-constructed-objects.cpp
 (+8) 


``diff
diff --git 
a/clang-tools-extra/clang-tidy/fuchsia/StaticallyConstructedObjectsCheck.cpp 
b/clang-tools-extra/clang-tidy/fuchsia/StaticallyConstructedObjectsCheck.cpp
index 9e540e03d365b..93687c35e39c7 100644
--- a/clang-tools-extra/clang-tidy/fuchsia/StaticallyConstructedObjectsCheck.cpp
+++ b/clang-tools-extra/clang-tidy/fuchsia/StaticallyConstructedObjectsCheck.cpp
@@ -13,8 +13,9 @@ using namespace clang::ast_matchers;
 namespace clang::tidy::fuchsia {
 
 namespace {
-AST_MATCHER(Expr, isConstantInitializer) {
-  return Node.isConstantInitializer(Finder->getASTContext(), false);
+AST_MATCHER(Expr, isConstantOrValueDependentInitializer) {
+  return Node.isValueDependent() ||
+ Node.isConstantInitializer(Finder->getASTContext(), false);
 }
 
 AST_MATCHER(VarDecl, isGlobalStatic) {
@@ -35,8 +36,8 @@ void 
StaticallyConstructedObjectsCheck::registerMatchers(MatchFinder *Finder) {
hasDescendant(cxxConstructExpr(unless(allOf(
// ... unless it is constexpr ...
hasDeclaration(cxxConstructorDecl(isConstexpr())),
-   // ... and is statically initialized.
-   isConstantInitializer())
+   // ... and is a constant or value-dependent initializer.
+   isConstantOrValueDependentInitializer())
.bind("decl")),
   this);
 }
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst 
b/clang-tools-extra/docs/ReleaseNotes.rst
index 3bc902529a1dc..36c597d2d6a18 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -511,6 +511,10 @@ Changes in existing checks
   `IgnoreMacros` option. When enabled, unscoped ``enum`` declarations within
   macros are ignored.
 
+- Improved :doc:`fuchsia-statically-constructed-objects
+  ` check by fixing a
+  crash when checking value-dependent static member initializers in class 
templates.
+
 - Improved :doc:`llvm-use-ranges
   ` check by adding support for the 
following
   algorithms: ``std::accumulate``, ``std::replace_copy``, and
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/fuchsia/statically-constructed-objects.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/fuchsia/statically-constructed-objects.cpp
index 006494eeca679..37ca2c0dee4f2 100644
--- 
a/clang-tools-extra/test/clang-tidy/checkers/fuchsia/statically-constructed-objects.cpp
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/fuchsia/statically-constructed-objects.cpp
@@ -81,6 +81,14 @@ static S s3(get_i());
 // CHECK-MESSAGES: [[@LINE-1]]:1: warning: static objects are disallowed; if 
possible, use a constexpr constructor instead 
[fuchsia-statically-constructed-objects]
 // CHECK-MESSAGES-NEXT:  static S s3(get_i());
 
+template 
+struct ClassTemplateWithStaticMember {
+  static S StaticMember;
+};
+
+template 
+S ClassTemplateWithStaticMember::StaticMember(Val);
+
 void f() {
   // Locally static is fine
   static int i;

``




https://github.com/llvm/llvm-project/pull/201287
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Avoid evaluating value-dependent static initializers in fuchsia-statically-constructed-objects (PR #201287)

2026-06-03 Thread Zeyi Xu via cfe-commits

https://github.com/zeyi2 ready_for_review 
https://github.com/llvm/llvm-project/pull/201287
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Avoid evaluating value-dependent static initializers in fuchsia-statically-constructed-objects (PR #201287)

2026-06-03 Thread Zeyi Xu via cfe-commits

https://github.com/zeyi2 updated 
https://github.com/llvm/llvm-project/pull/201287

>From b04675e17127a2fb08f60e9cc7e66bc1610f76ef Mon Sep 17 00:00:00 2001
From: Zeyi Xu 
Date: Wed, 3 Jun 2026 16:00:13 +0800
Subject: [PATCH 1/2] [clang-tidy] Avoid evaluating value-dependent static
 initializers in fuchsia-statically-constructed-objects

---
 .../fuchsia/StaticallyConstructedObjectsCheck.cpp| 9 +
 clang-tools-extra/docs/ReleaseNotes.rst  | 4 
 .../checkers/fuchsia/statically-constructed-objects.cpp  | 8 
 3 files changed, 17 insertions(+), 4 deletions(-)

diff --git 
a/clang-tools-extra/clang-tidy/fuchsia/StaticallyConstructedObjectsCheck.cpp 
b/clang-tools-extra/clang-tidy/fuchsia/StaticallyConstructedObjectsCheck.cpp
index 9e540e03d365b..6e42fb61c8521 100644
--- a/clang-tools-extra/clang-tidy/fuchsia/StaticallyConstructedObjectsCheck.cpp
+++ b/clang-tools-extra/clang-tidy/fuchsia/StaticallyConstructedObjectsCheck.cpp
@@ -13,8 +13,9 @@ using namespace clang::ast_matchers;
 namespace clang::tidy::fuchsia {
 
 namespace {
-AST_MATCHER(Expr, isConstantInitializer) {
-  return Node.isConstantInitializer(Finder->getASTContext(), false);
+AST_MATCHER(Expr, isConstantInitializerOrValueDependent) {
+  return Node.isValueDependent() ||
+ Node.isConstantInitializer(Finder->getASTContext(), false);
 }
 
 AST_MATCHER(VarDecl, isGlobalStatic) {
@@ -35,8 +36,8 @@ void 
StaticallyConstructedObjectsCheck::registerMatchers(MatchFinder *Finder) {
hasDescendant(cxxConstructExpr(unless(allOf(
// ... unless it is constexpr ...
hasDeclaration(cxxConstructorDecl(isConstexpr())),
-   // ... and is statically initialized.
-   isConstantInitializer())
+   // ... and is statically initialized or value-dependent.
+   isConstantInitializerOrValueDependent())
.bind("decl")),
   this);
 }
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst 
b/clang-tools-extra/docs/ReleaseNotes.rst
index 3bc902529a1dc..36c597d2d6a18 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -511,6 +511,10 @@ Changes in existing checks
   `IgnoreMacros` option. When enabled, unscoped ``enum`` declarations within
   macros are ignored.
 
+- Improved :doc:`fuchsia-statically-constructed-objects
+  ` check by fixing a
+  crash when checking value-dependent static member initializers in class 
templates.
+
 - Improved :doc:`llvm-use-ranges
   ` check by adding support for the 
following
   algorithms: ``std::accumulate``, ``std::replace_copy``, and
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/fuchsia/statically-constructed-objects.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/fuchsia/statically-constructed-objects.cpp
index 006494eeca679..37ca2c0dee4f2 100644
--- 
a/clang-tools-extra/test/clang-tidy/checkers/fuchsia/statically-constructed-objects.cpp
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/fuchsia/statically-constructed-objects.cpp
@@ -81,6 +81,14 @@ static S s3(get_i());
 // CHECK-MESSAGES: [[@LINE-1]]:1: warning: static objects are disallowed; if 
possible, use a constexpr constructor instead 
[fuchsia-statically-constructed-objects]
 // CHECK-MESSAGES-NEXT:  static S s3(get_i());
 
+template 
+struct ClassTemplateWithStaticMember {
+  static S StaticMember;
+};
+
+template 
+S ClassTemplateWithStaticMember::StaticMember(Val);
+
 void f() {
   // Locally static is fine
   static int i;

>From 6868d9096691bbdda78d75222c3be048e2c29c53 Mon Sep 17 00:00:00 2001
From: Zeyi Xu 
Date: Wed, 3 Jun 2026 16:12:36 +0800
Subject: [PATCH 2/2] better name

---
 .../fuchsia/StaticallyConstructedObjectsCheck.cpp   | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git 
a/clang-tools-extra/clang-tidy/fuchsia/StaticallyConstructedObjectsCheck.cpp 
b/clang-tools-extra/clang-tidy/fuchsia/StaticallyConstructedObjectsCheck.cpp
index 6e42fb61c8521..93687c35e39c7 100644
--- a/clang-tools-extra/clang-tidy/fuchsia/StaticallyConstructedObjectsCheck.cpp
+++ b/clang-tools-extra/clang-tidy/fuchsia/StaticallyConstructedObjectsCheck.cpp
@@ -13,7 +13,7 @@ using namespace clang::ast_matchers;
 namespace clang::tidy::fuchsia {
 
 namespace {
-AST_MATCHER(Expr, isConstantInitializerOrValueDependent) {
+AST_MATCHER(Expr, isConstantOrValueDependentInitializer) {
   return Node.isValueDependent() ||
  Node.isConstantInitializer(Finder->getASTContext(), false);
 }
@@ -36,8 +36,8 @@ void 
StaticallyConstructedObjectsCheck::registerMatchers(MatchFinder *Finder) {
hasDescendant(cxxConstructExpr(unless(allOf(
// ... unless it is constexpr ...
hasDeclaration(cxxConstructorDecl(isConstexpr())),
-   // ... and is statically initialized or value-dependent.
-   isConst

[clang-tools-extra] [clang-tidy] Avoid evaluating value-dependent static initializers in fuchsia-statically-constructed-objects (PR #201287)

2026-06-03 Thread Zeyi Xu via cfe-commits

https://github.com/zeyi2 edited https://github.com/llvm/llvm-project/pull/201287
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Avoid evaluating value-dependent static initializers in fuchsia-statically-constructed-objects (PR #201287)

2026-06-03 Thread Zeyi Xu via cfe-commits

https://github.com/zeyi2 created 
https://github.com/llvm/llvm-project/pull/201287

None

>From b04675e17127a2fb08f60e9cc7e66bc1610f76ef Mon Sep 17 00:00:00 2001
From: Zeyi Xu 
Date: Wed, 3 Jun 2026 16:00:13 +0800
Subject: [PATCH] [clang-tidy] Avoid evaluating value-dependent static
 initializers in fuchsia-statically-constructed-objects

---
 .../fuchsia/StaticallyConstructedObjectsCheck.cpp| 9 +
 clang-tools-extra/docs/ReleaseNotes.rst  | 4 
 .../checkers/fuchsia/statically-constructed-objects.cpp  | 8 
 3 files changed, 17 insertions(+), 4 deletions(-)

diff --git 
a/clang-tools-extra/clang-tidy/fuchsia/StaticallyConstructedObjectsCheck.cpp 
b/clang-tools-extra/clang-tidy/fuchsia/StaticallyConstructedObjectsCheck.cpp
index 9e540e03d365b..6e42fb61c8521 100644
--- a/clang-tools-extra/clang-tidy/fuchsia/StaticallyConstructedObjectsCheck.cpp
+++ b/clang-tools-extra/clang-tidy/fuchsia/StaticallyConstructedObjectsCheck.cpp
@@ -13,8 +13,9 @@ using namespace clang::ast_matchers;
 namespace clang::tidy::fuchsia {
 
 namespace {
-AST_MATCHER(Expr, isConstantInitializer) {
-  return Node.isConstantInitializer(Finder->getASTContext(), false);
+AST_MATCHER(Expr, isConstantInitializerOrValueDependent) {
+  return Node.isValueDependent() ||
+ Node.isConstantInitializer(Finder->getASTContext(), false);
 }
 
 AST_MATCHER(VarDecl, isGlobalStatic) {
@@ -35,8 +36,8 @@ void 
StaticallyConstructedObjectsCheck::registerMatchers(MatchFinder *Finder) {
hasDescendant(cxxConstructExpr(unless(allOf(
// ... unless it is constexpr ...
hasDeclaration(cxxConstructorDecl(isConstexpr())),
-   // ... and is statically initialized.
-   isConstantInitializer())
+   // ... and is statically initialized or value-dependent.
+   isConstantInitializerOrValueDependent())
.bind("decl")),
   this);
 }
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst 
b/clang-tools-extra/docs/ReleaseNotes.rst
index 3bc902529a1dc..36c597d2d6a18 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -511,6 +511,10 @@ Changes in existing checks
   `IgnoreMacros` option. When enabled, unscoped ``enum`` declarations within
   macros are ignored.
 
+- Improved :doc:`fuchsia-statically-constructed-objects
+  ` check by fixing a
+  crash when checking value-dependent static member initializers in class 
templates.
+
 - Improved :doc:`llvm-use-ranges
   ` check by adding support for the 
following
   algorithms: ``std::accumulate``, ``std::replace_copy``, and
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/fuchsia/statically-constructed-objects.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/fuchsia/statically-constructed-objects.cpp
index 006494eeca679..37ca2c0dee4f2 100644
--- 
a/clang-tools-extra/test/clang-tidy/checkers/fuchsia/statically-constructed-objects.cpp
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/fuchsia/statically-constructed-objects.cpp
@@ -81,6 +81,14 @@ static S s3(get_i());
 // CHECK-MESSAGES: [[@LINE-1]]:1: warning: static objects are disallowed; if 
possible, use a constexpr constructor instead 
[fuchsia-statically-constructed-objects]
 // CHECK-MESSAGES-NEXT:  static S s3(get_i());
 
+template 
+struct ClassTemplateWithStaticMember {
+  static S StaticMember;
+};
+
+template 
+S ClassTemplateWithStaticMember::StaticMember(Val);
+
 void f() {
   // Locally static is fine
   static int i;

___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits