https://gcc.gnu.org/g:b6825a7ce698b65657e952e437ab9edd655fe5a5
commit r17-2172-gb6825a7ce698b65657e952e437ab9edd655fe5a5 Author: Jason Merrill <[email protected]> Date: Wed Jul 1 11:49:39 2026 -0400 c++: naming typedef and incomplete class [PR126031] We can't look at the bases and members of a forward-declared nested class, and such a forward declaration can't contain problematic constructs, so treat it as OK. PR c++/126031 PR c++/121552 gcc/cp/ChangeLog: * decl.cc (maybe_diagnose_non_c_class_typedef_for_linkage): Handle incomplete type. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/typedef2.C: New test. Diff: --- gcc/cp/decl.cc | 2 ++ gcc/testsuite/g++.dg/cpp2a/typedef2.C | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc index 79247302608d..a22331073173 100644 --- a/gcc/cp/decl.cc +++ b/gcc/cp/decl.cc @@ -13775,6 +13775,8 @@ diagnose_non_c_class_typedef_for_linkage (tree type, tree orig) static bool maybe_diagnose_non_c_class_typedef_for_linkage (tree type, tree orig, tree t) { + if (!COMPLETE_TYPE_P (t)) + return false; if (!BINFO_BASE_BINFOS (TYPE_BINFO (t))->is_empty ()) { auto_diagnostic_group d; diff --git a/gcc/testsuite/g++.dg/cpp2a/typedef2.C b/gcc/testsuite/g++.dg/cpp2a/typedef2.C new file mode 100644 index 000000000000..e4a8195ce18d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/typedef2.C @@ -0,0 +1,5 @@ +// PR c++/126031 + +typedef struct { + struct S; +} s;
