aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2022-05-11 09:44:57 -0400
committerJason Merrill <jason@redhat.com>2022-05-11 13:50:39 -0400
commit4dc86f716fe6087f1cf786d69c0c6f3f5af810f0 (patch)
tree7b5cda30b62f9adc5d5c258f50d79b0110d4ac00 /gcc
parent0acdbe29f66017fc5cca40dcbd72a0dd41491d07 (diff)
downloadgcc-4dc86f716fe6087f1cf786d69c0c6f3f5af810f0.zip
gcc-4dc86f716fe6087f1cf786d69c0c6f3f5af810f0.tar.gz
gcc-4dc86f716fe6087f1cf786d69c0c6f3f5af810f0.tar.bz2
c++: fix arm-eabi bootstrap [PR105567]
Since my r13-112, in the template we were changing 'return' to 'return this' on cdtor_returns_this targets, and then getting confused by that when instantiating. So only make that change at instantiation time. PR bootstrap/105567 gcc/cp/ChangeLog: * typeck.cc (check_return_expr): Don't mess with ctor return value while parsing a template. gcc/testsuite/ChangeLog: * g++.dg/template/ctor10.C: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/typeck.cc4
-rw-r--r--gcc/testsuite/g++.dg/template/ctor10.C10
2 files changed, 12 insertions, 2 deletions
diff --git a/gcc/cp/typeck.cc b/gcc/cp/typeck.cc
index 57e55ed..6ecdd97 100644
--- a/gcc/cp/typeck.cc
+++ b/gcc/cp/typeck.cc
@@ -10448,7 +10448,7 @@ check_return_expr (tree retval, bool *no_warning)
if (retval)
error_at (loc, "returning a value from a destructor");
- if (targetm.cxx.cdtor_returns_this ())
+ if (targetm.cxx.cdtor_returns_this () && !processing_template_decl)
retval = current_class_ptr;
else
return NULL_TREE;
@@ -10463,7 +10463,7 @@ check_return_expr (tree retval, bool *no_warning)
/* You can't return a value from a constructor. */
error_at (loc, "returning a value from a constructor");
- if (targetm.cxx.cdtor_returns_this ())
+ if (targetm.cxx.cdtor_returns_this () && !processing_template_decl)
retval = current_class_ptr;
else
return NULL_TREE;
diff --git a/gcc/testsuite/g++.dg/template/ctor10.C b/gcc/testsuite/g++.dg/template/ctor10.C
new file mode 100644
index 0000000..cf10fc5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/ctor10.C
@@ -0,0 +1,10 @@
+// PR bootstrap/105567
+// This was breaking with cdtor_returns_this.
+
+template <class T>
+struct A
+{
+ A() { return; }
+};
+
+A<int> a;