On 3/16/26 10:40 AM, Marek Polacek wrote:
Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for trunk?

-- >8 --
This test with invalid ^^decltype crashes.  finish_decltype_type
can now see a USING_DECL because they sometimes aren't stripped when
using -freflection.  We should give an error like we do for TYPE_DECL,
otherwise finish_decltype_type returns NULL_TREE and eventually we
crash in cp_parser_qualifying_entity after calling cp_parser_decltype.

The USING_DECL should be stripped in this case, we only want to avoid stripping it for the immediate operand of ^^.

        PR c++/124494

gcc/cp/ChangeLog:

        * semantics.cc (finish_decltype_type): Also error for USING_DECL.

gcc/testsuite/ChangeLog:

        * g++.dg/reflect/decltype1.C: New test.
---
  gcc/cp/semantics.cc                      | 2 ++
  gcc/testsuite/g++.dg/reflect/decltype1.C | 9 +++++++++
  2 files changed, 11 insertions(+)
  create mode 100644 gcc/testsuite/g++.dg/reflect/decltype1.C

diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc
index ac08b598f3d..5f6ee949f05 100644
--- a/gcc/cp/semantics.cc
+++ b/gcc/cp/semantics.cc
@@ -13163,6 +13163,8 @@ finish_decltype_type (tree expr, bool 
id_expression_or_member_access_p,
if (TYPE_P (expr)
        || TREE_CODE (expr) == TYPE_DECL
+      /* In reflect-expressions USING_DECLs are not stripped.  */
+      || TREE_CODE (expr) == USING_DECL
        || (TREE_CODE (expr) == BIT_NOT_EXPR
          && TYPE_P (TREE_OPERAND (expr, 0))))
      {
diff --git a/gcc/testsuite/g++.dg/reflect/decltype1.C 
b/gcc/testsuite/g++.dg/reflect/decltype1.C
new file mode 100644
index 00000000000..2f9948b7a35
--- /dev/null
+++ b/gcc/testsuite/g++.dg/reflect/decltype1.C
@@ -0,0 +1,9 @@
+// PR c++/124494
+// { dg-do compile { target c++26 } }
+// { dg-additional-options "-freflection" }
+
+typedef signed char int8_t;
+namespace std {
+  using ::int8_t;
+}
+auto rr = ^^decltype(std::int8_t); // { dg-error "argument to .decltype. must be an 
expression" }

base-commit: 64f95a0eeaf1cb6d07cc414c9b2953a494e03be1

Reply via email to