Commit 420db574 by Jakub Jelinek Committed by Jakub Jelinek

re PR c++/82373 (syntax error in error message)

	PR c++/82373
	* error.c (dump_function_decl): If show_return, call dump_type_suffix
	on the same return type dump_type_prefix has been called on.

	* g++.dg/cpp1y/pr82373.C: New test.

From-SVN: r253418
parent 4e914524
2017-10-04 Jakub Jelinek <jakub@redhat.com>
PR c++/82373
* error.c (dump_function_decl): If show_return, call dump_type_suffix
on the same return type dump_type_prefix has been called on.
2017-10-04 Jason Merrill <jason@redhat.com> 2017-10-04 Jason Merrill <jason@redhat.com>
PR c++/81525 - broken handling of auto in generic lambda. PR c++/81525 - broken handling of auto in generic lambda.
......
...@@ -1574,6 +1574,7 @@ dump_function_decl (cxx_pretty_printer *pp, tree t, int flags) ...@@ -1574,6 +1574,7 @@ dump_function_decl (cxx_pretty_printer *pp, tree t, int flags)
int do_outer_scope = ! (flags & TFF_UNQUALIFIED_NAME); int do_outer_scope = ! (flags & TFF_UNQUALIFIED_NAME);
tree exceptions; tree exceptions;
bool constexpr_p; bool constexpr_p;
tree ret = NULL_TREE;
flags &= ~(TFF_UNQUALIFIED_NAME | TFF_TEMPLATE_NAME); flags &= ~(TFF_UNQUALIFIED_NAME | TFF_TEMPLATE_NAME);
if (TREE_CODE (t) == TEMPLATE_DECL) if (TREE_CODE (t) == TEMPLATE_DECL)
...@@ -1636,7 +1637,7 @@ dump_function_decl (cxx_pretty_printer *pp, tree t, int flags) ...@@ -1636,7 +1637,7 @@ dump_function_decl (cxx_pretty_printer *pp, tree t, int flags)
&& !DECL_DESTRUCTOR_P (t) && !deduction_guide_p (t)); && !DECL_DESTRUCTOR_P (t) && !deduction_guide_p (t));
if (show_return) if (show_return)
{ {
tree ret = fndecl_declared_return_type (t); ret = fndecl_declared_return_type (t);
dump_type_prefix (pp, ret, flags); dump_type_prefix (pp, ret, flags);
} }
...@@ -1677,7 +1678,7 @@ dump_function_decl (cxx_pretty_printer *pp, tree t, int flags) ...@@ -1677,7 +1678,7 @@ dump_function_decl (cxx_pretty_printer *pp, tree t, int flags)
} }
if (show_return) if (show_return)
dump_type_suffix (pp, TREE_TYPE (fntype), flags); dump_type_suffix (pp, ret, flags);
else if (deduction_guide_p (t)) else if (deduction_guide_p (t))
{ {
pp_cxx_ws_string (pp, "->"); pp_cxx_ws_string (pp, "->");
......
2017-10-04 Jakub Jelinek <jakub@redhat.com>
PR c++/82373
* g++.dg/cpp1y/pr82373.C: New test.
2017-10-04 David Malcolm <dmalcolm@redhat.com> 2017-10-04 David Malcolm <dmalcolm@redhat.com>
* gcc.dg/diagnostic-range-bad-called-object.c: Update expected * gcc.dg/diagnostic-range-bad-called-object.c: Update expected
......
// PR c++/82373
// { dg-do compile { target c++14 } }
namespace N
{
int (*fp)(int);
auto foo(int a) // { dg-message "In function 'auto N::foo\\(int\\)'" "" { target *-*-* } 0 }
{
if (a)
return fp;
return nullptr; // { dg-error "inconsistent deduction for auto return type: 'int \\(\\*\\)\\(int\\)' and then 'std::nullptr_t'" } */
}
}
int (*fp2)(int);
auto bar(int a) // { dg-message "In function 'auto bar\\(int\\)'" "" { target *-*-* } 0 }
{
if (a)
return fp2;
return nullptr; // { dg-error "inconsistent deduction for auto return type: 'int \\(\\*\\)\\(int\\)' and then 'std::nullptr_t'" } */
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment