Normal error-recovery.

Tested x86_64-pc-linux-gnu, applying to trunk.

        * typeck.c (cp_build_binary_op): Handle error from spaceship_type.
---
 gcc/cp/typeck.c                                   |  6 +++++-
 gcc/testsuite/g++.dg/cpp2a/spaceship-synth-neg3.C | 12 ++++++++++++
 2 files changed, 17 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/g++.dg/cpp2a/spaceship-synth-neg3.C

diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index d0f739895c9..d3814585e3f 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -5418,7 +5418,11 @@ cp_build_binary_op (const op_location_t &location,
        result_type = NULL_TREE;
 
       if (result_type)
-       build_type = spaceship_type (result_type, complain);
+       {
+         build_type = spaceship_type (result_type, complain);
+         if (build_type == error_mark_node)
+           return error_mark_node;
+       }
 
       if (result_type && arithmetic_types_p)
        {
diff --git a/gcc/testsuite/g++.dg/cpp2a/spaceship-synth-neg3.C 
b/gcc/testsuite/g++.dg/cpp2a/spaceship-synth-neg3.C
new file mode 100644
index 00000000000..45ce4ee047a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/spaceship-synth-neg3.C
@@ -0,0 +1,12 @@
+// PR c++/92496
+// { dg-do compile { target c++2a } }
+
+template<auto V>
+struct A {};
+
+struct B {
+    constexpr auto operator<=>(const B&) const = default; // { dg-error "" }
+    int value;
+};
+
+A<B{}> t;

base-commit: 3dbaca45883c354c9d4e9542d5c95f054997f844
-- 
2.18.1

Reply via email to