[clang] [Clang] Add regression test for #175934 (PR #227936)
Yuta Nakamura via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 30 20:12:31 PDT 2026
https://github.com/nakasan617 updated https://github.com/llvm/llvm-project/pull/227936
>From d3f0185286646b70e6c15f06f6cbbe9c05d3dd71 Mon Sep 17 00:00:00 2001
From: Yuta Nakamura <yutanak6 at gmail.com>
Date: Thu, 1 Oct 2026 11:29:18 +0900
Subject: [PATCH 1/3] [Clang] Add regression test for #175934
Taking the address of a static data member of a class template inside
`decltype` used to make the field type dependent, which crashed record
layout with "should not see dependent types here". This was fixed by
#208012, which made such expressions value-instantiation-dependent
rather than value-dependent, but no test was added for this case.
Fixes #175934
Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
---
clang/test/SemaTemplate/dependent-expr.cpp | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/clang/test/SemaTemplate/dependent-expr.cpp b/clang/test/SemaTemplate/dependent-expr.cpp
index ce210d9b74f6d..d52b9ed4bee50 100644
--- a/clang/test/SemaTemplate/dependent-expr.cpp
+++ b/clang/test/SemaTemplate/dependent-expr.cpp
@@ -180,3 +180,17 @@ class Builder {
static constexpr auto Val = JoinStringViews<Equal>;
};
} // namespace PR65153
+
+namespace GH175934 {
+template <class T>
+struct Y {
+ static const int e = 1;
+ decltype(&e) g;
+};
+
+// Taking the address of a static data member is value-dependent but not
+// type-dependent, so the field type must be concrete by the time the layout
+// of Y<int> is computed.
+void f() { Y<int> y; }
+static_assert(__is_same(decltype(Y<int>::g), const int *), "");
+} // namespace GH175934
>From d0491b20563f5714a8db7a6d2c1b7d86700bab65 Mon Sep 17 00:00:00 2001
From: Yuta Nakamura <yutanak6 at gmail.com>
Date: Thu, 1 Oct 2026 11:49:48 +0900
Subject: [PATCH 2/3] Remove comment from test
Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
---
clang/test/SemaTemplate/dependent-expr.cpp | 3 ---
1 file changed, 3 deletions(-)
diff --git a/clang/test/SemaTemplate/dependent-expr.cpp b/clang/test/SemaTemplate/dependent-expr.cpp
index d52b9ed4bee50..1a00f78de9a99 100644
--- a/clang/test/SemaTemplate/dependent-expr.cpp
+++ b/clang/test/SemaTemplate/dependent-expr.cpp
@@ -188,9 +188,6 @@ struct Y {
decltype(&e) g;
};
-// Taking the address of a static data member is value-dependent but not
-// type-dependent, so the field type must be concrete by the time the layout
-// of Y<int> is computed.
void f() { Y<int> y; }
static_assert(__is_same(decltype(Y<int>::g), const int *), "");
} // namespace GH175934
>From fa9b0bb5b0f523a87c7ae47520b9bd2901ff528b Mon Sep 17 00:00:00 2001
From: Yuta Nakamura <yutanak6 at gmail.com>
Date: Thu, 1 Oct 2026 12:12:13 +0900
Subject: [PATCH 3/3] Remove static_assert from test
Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
---
clang/test/SemaTemplate/dependent-expr.cpp | 1 -
1 file changed, 1 deletion(-)
diff --git a/clang/test/SemaTemplate/dependent-expr.cpp b/clang/test/SemaTemplate/dependent-expr.cpp
index 1a00f78de9a99..667411a8e66b7 100644
--- a/clang/test/SemaTemplate/dependent-expr.cpp
+++ b/clang/test/SemaTemplate/dependent-expr.cpp
@@ -189,5 +189,4 @@ struct Y {
};
void f() { Y<int> y; }
-static_assert(__is_same(decltype(Y<int>::g), const int *), "");
} // namespace GH175934
More information about the cfe-commits
mailing list