https://gcc.gnu.org/g:6e67742b4f4fabc75b85b92dd935c298d3a23426
commit r16-9234-g6e67742b4f4fabc75b85b92dd935c298d3a23426 Author: Jason Merrill <[email protected]> Date: Mon Jul 6 12:16:38 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. (cherry picked from commit b6825a7ce698b65657e952e437ab9edd655fe5a5) 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 ee65b2fa3cdb..923a0f4ef7de 100644 --- a/gcc/cp/decl.cc +++ b/gcc/cp/decl.cc @@ -13781,6 +13781,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;
