Commit aa97bb6f by Adam Butcher Committed by Paolo Carlini

re PR c++/65750 (misinterpret in a virtual member function with a C++11 style function signature)

/cp
2015-06-24  Adam Butcher  <adam@jessamine.co.uk>

	PR c++/65750
	* parser.c (cp_parser_simple_type_specifier): Don't synthesize
	implicit template parm if 'auto' is a placeholder for trailing
	return type.

/testsuite
2015-06-24  Adam Butcher  <adam@jessamine.co.uk>

	PR c++/65750
	* g++.dg/cpp0x/trailing11.C: New.

From-SVN: r224901
parent e00cdb8a
2015-06-24 Adam Butcher <adam@jessamine.co.uk>
PR c++/65750
* parser.c (cp_parser_simple_type_specifier): Don't synthesize
implicit template parm if 'auto' is a placeholder for trailing
return type.
2015-06-24 Patrick Palka <ppalka@gcc.gnu.org>
Revert:
......
......@@ -14939,6 +14939,30 @@ cp_parser_simple_type_specifier (cp_parser* parser,
maybe_warn_cpp0x (CPP0X_AUTO);
if (parser->auto_is_implicit_function_template_parm_p)
{
/* The 'auto' might be the placeholder return type for a function decl
with trailing return type. */
bool have_trailing_return_fn_decl = false;
if (cp_lexer_peek_nth_token (parser->lexer, 2)->type
== CPP_OPEN_PAREN)
{
cp_parser_parse_tentatively (parser);
cp_lexer_consume_token (parser->lexer);
cp_lexer_consume_token (parser->lexer);
if (cp_parser_skip_to_closing_parenthesis (parser,
/*recovering*/false,
/*or_comma*/false,
/*consume_paren*/true))
have_trailing_return_fn_decl
= cp_lexer_next_token_is (parser->lexer, CPP_DEREF);
cp_parser_abort_tentative_parse (parser);
}
if (have_trailing_return_fn_decl)
{
type = make_auto ();
break;
}
if (cxx_dialect >= cxx14)
type = synthesize_implicit_template_parm (parser);
else
......
2015-06-24 Adam Butcher <adam@jessamine.co.uk>
PR c++/65750
* g++.dg/cpp0x/trailing11.C: New.
2015-06-24 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
* gcc.target/arm/fixed_float_conversion.c: Skip for inappropriate
......
// PR c++/65750
// { dg-do compile { target c++11 } }
template<typename T> struct F { };
class a
{
virtual auto f( F< void () > ) -> void;
virtual auto g( F< auto () -> void > ) -> void;
};
auto main() -> int { }
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