diff options
author | Jason Merrill <jason@redhat.com> | 2022-05-11 09:44:57 -0400 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2022-05-11 13:50:39 -0400 |
commit | 4dc86f716fe6087f1cf786d69c0c6f3f5af810f0 (patch) | |
tree | 7b5cda30b62f9adc5d5c258f50d79b0110d4ac00 /gcc | |
parent | 0acdbe29f66017fc5cca40dcbd72a0dd41491d07 (diff) | |
download | gcc-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.cc | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/ctor10.C | 10 |
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; |