PR c++/80465 - ICE with generic lambda with noexcept-specifier.
* lambda.c (maybe_add_lambda_conv_op): Keep processing_template_decl set longer for a generic lambda. From-SVN: r249328
This commit is contained in:
parent
e2595c6b32
commit
d4ddf7af75
@ -1,5 +1,9 @@
|
||||
2017-06-16 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/80465 - ICE with generic lambda with noexcept-specifier.
|
||||
* lambda.c (maybe_add_lambda_conv_op): Keep processing_template_decl
|
||||
set longer for a generic lambda.
|
||||
|
||||
PR c++/80614 - Wrong mangling for C++17 noexcept type
|
||||
* mangle.c (write_type): Put the eh spec back on the function type.
|
||||
|
||||
|
@ -999,6 +999,8 @@ maybe_add_lambda_conv_op (tree type)
|
||||
null_pointer_node);
|
||||
if (generic_lambda_p)
|
||||
{
|
||||
++processing_template_decl;
|
||||
|
||||
/* Prepare the dependent member call for the static member function
|
||||
'_FUN' and, potentially, prepare another call to be used in a decltype
|
||||
return expression for a deduced return call op to allow for simple
|
||||
@ -1048,9 +1050,7 @@ maybe_add_lambda_conv_op (tree type)
|
||||
|
||||
if (generic_lambda_p)
|
||||
{
|
||||
++processing_template_decl;
|
||||
tree a = forward_parm (tgt);
|
||||
--processing_template_decl;
|
||||
|
||||
CALL_EXPR_ARG (call, ix) = a;
|
||||
if (decltype_call)
|
||||
@ -1074,11 +1074,9 @@ maybe_add_lambda_conv_op (tree type)
|
||||
{
|
||||
if (decltype_call)
|
||||
{
|
||||
++processing_template_decl;
|
||||
fn_result = finish_decltype_type
|
||||
(decltype_call, /*id_expression_or_member_access_p=*/false,
|
||||
tf_warning_or_error);
|
||||
--processing_template_decl;
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1096,6 +1094,9 @@ maybe_add_lambda_conv_op (tree type)
|
||||
&& TYPE_NOTHROW_P (TREE_TYPE (callop)))
|
||||
stattype = build_exception_variant (stattype, noexcept_true_spec);
|
||||
|
||||
if (generic_lambda_p)
|
||||
--processing_template_decl;
|
||||
|
||||
/* First build up the conversion op. */
|
||||
|
||||
tree rettype = build_pointer_type (stattype);
|
||||
|
7
gcc/testsuite/g++.dg/cpp1z/noexcept-type17.C
Normal file
7
gcc/testsuite/g++.dg/cpp1z/noexcept-type17.C
Normal file
@ -0,0 +1,7 @@
|
||||
// PR c++/80465
|
||||
// { dg-options -std=c++1z }
|
||||
|
||||
int foo(...);
|
||||
int main() {
|
||||
[](auto a) noexcept(noexcept(foo(a))){}(42);
|
||||
}
|
Loading…
Reference in New Issue
Block a user