Commit 90f6debe by Jason Merrill Committed by Jason Merrill

re PR c++/64105 (ICE: in strip_typedefs, at cp/tree.c:1326)

	PR c++/64105
	* parser.c (cp_parser_simple_type_specifier): Make auto parameter
	before -std=c++14 an error.

From-SVN: r218879
parent 18d27358
2014-12-18 Jason Merrill <jason@redhat.com>
PR c++/64105
* parser.c (cp_parser_simple_type_specifier): Make auto parameter
before -std=c++14 an error.
PR c++/64352
* pt.c (tsubst_copy_and_build): Pass complain to mark_used.
......
......@@ -14862,23 +14862,26 @@ cp_parser_simple_type_specifier (cp_parser* parser,
maybe_warn_cpp0x (CPP0X_AUTO);
if (parser->auto_is_implicit_function_template_parm_p)
{
type = synthesize_implicit_template_parm (parser);
if (cxx_dialect >= cxx14)
type = synthesize_implicit_template_parm (parser);
else
type = error_mark_node;
if (current_class_type && LAMBDA_TYPE_P (current_class_type))
{
if (cxx_dialect < cxx14)
pedwarn (location_of (type), 0,
error_at (token->location,
"use of %<auto%> in lambda parameter declaration "
"only available with "
"-std=c++14 or -std=gnu++14");
}
else if (cxx_dialect < cxx14)
pedwarn (location_of (type), 0,
error_at (token->location,
"use of %<auto%> in parameter declaration "
"only available with "
"-std=c++14 or -std=gnu++14");
else
pedwarn (location_of (type), OPT_Wpedantic,
pedwarn (token->location, OPT_Wpedantic,
"ISO C++ forbids use of %<auto%> in parameter "
"declaration");
}
......@@ -14971,6 +14974,9 @@ cp_parser_simple_type_specifier (cp_parser* parser,
/* Consume the token. */
cp_lexer_consume_token (parser->lexer);
if (type == error_mark_node)
return error_mark_node;
/* There is no valid C++ program where a non-template type is
followed by a "<". That usually indicates that the user thought
that the type was a template. */
......
// PR c++/64105
// This test was ICEing on pre-C++14 mode.
#include <functional>
using F = std::function<void(void)>;
struct X
{
template <typename T>
static void f(T t)
{
g(t);
}
static void g(F) {}
};
int main()
{
X::f([](auto... xs){}); // { dg-error "" "" { target { ! cxx14 } } }
};
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