From: Jason Merrill Date: Wed, 1 Jul 2026 15:49:39 +0000 (-0400) Subject: c++: naming typedef and incomplete class [PR126031] X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b6825a7ce698b65657e952e437ab9edd655fe5a5;p=thirdparty%2Fgcc.git 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 --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc index 79247302608..a2233107317 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 00000000000..e4a8195ce18 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/typedef2.C @@ -0,0 +1,5 @@ +// PR c++/126031 + +typedef struct { + struct S; +} s;