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;

Reply via email to