diff options
author | Jason Merrill <jason@redhat.com> | 2018-03-01 14:40:36 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2018-03-01 14:40:36 -0500 |
commit | eedaaaf7d7892011245b1e2054ca917c6d81c213 (patch) | |
tree | ba7da455b178800799807d8c734af0c0e2bec837 /gcc/cp/parser.c | |
parent | 90abdde05bf124418f83e061677f5330e15664d9 (diff) | |
download | gcc-eedaaaf7d7892011245b1e2054ca917c6d81c213.zip gcc-eedaaaf7d7892011245b1e2054ca917c6d81c213.tar.gz gcc-eedaaaf7d7892011245b1e2054ca917c6d81c213.tar.bz2 |
PR c++/71569 - decltype of template.
* parser.c (cp_parser_decltype_expr): Handle missing template args.
From-SVN: r258110
Diffstat (limited to 'gcc/cp/parser.c')
-rw-r--r-- | gcc/cp/parser.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 359460c..e1acb07 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -13983,6 +13983,10 @@ cp_parser_decltype_expr (cp_parser *parser, expr = cp_parser_lookup_name_simple (parser, expr, id_expr_start_token->location); + if (expr && TREE_CODE (expr) == TEMPLATE_DECL) + /* A template without args is not a complete id-expression. */ + expr = error_mark_node; + if (expr && expr != error_mark_node && TREE_CODE (expr) != TYPE_DECL @@ -14048,6 +14052,9 @@ cp_parser_decltype_expr (cp_parser *parser, expression. */ cp_parser_abort_tentative_parse (parser); + /* Commit to the tentative_firewall so we get syntax errors. */ + cp_parser_commit_to_tentative_parse (parser); + /* Parse a full expression. */ expr = cp_parser_expression (parser, /*pidk=*/NULL, /*cast_p=*/false, /*decltype_p=*/true); |