From: Jakub Jelinek Date: Fri, 30 Aug 2019 12:18:01 +0000 (+0200) Subject: backport: re PR c++/89512 (ICE in get_expr_operands, at tree-ssa-operands.c:882) X-Git-Tag: releases/gcc-7.5.0~233 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=de06c171354154f4c83d7b35dfc8d4b6b284e982;p=thirdparty%2Fgcc.git backport: re PR c++/89512 (ICE in get_expr_operands, at tree-ssa-operands.c:882) Backported from mainline 2019-03-14 Jakub Jelinek PR c++/89512 * semantics.c (finish_qualified_id_expr): Reject variable templates. * g++.dg/cpp1y/var-templ61.C: New test. From-SVN: r275130 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 735a3640a869..0312b25d11bf 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,6 +1,11 @@ 2019-08-30 Jakub Jelinek Backported from mainline + 2019-03-14 Jakub Jelinek + + PR c++/89512 + * semantics.c (finish_qualified_id_expr): Reject variable templates. + 2019-03-06 Jakub Jelinek PR c++/87148 diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index dd95c74d7b0a..d0d0658c81fe 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -2067,6 +2067,14 @@ finish_qualified_id_expr (tree qualifying_class, } else if (BASELINK_P (expr)) ; + else if (!template_p + && TREE_CODE (expr) == TEMPLATE_DECL + && !DECL_FUNCTION_TEMPLATE_P (expr)) + { + if (complain & tf_error) + error ("%qE missing template arguments", expr); + return error_mark_node; + } else { /* In a template, return a SCOPE_REF for most qualified-ids diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0c14e5d26dfb..647648521364 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2019-08-30 Jakub Jelinek Backported from mainline + 2019-03-14 Jakub Jelinek + + PR c++/89512 + * g++.dg/cpp1y/var-templ61.C: New test. + 2019-03-13 Jakub Jelinek PR middle-end/88588 diff --git a/gcc/testsuite/g++.dg/cpp1y/var-templ61.C b/gcc/testsuite/g++.dg/cpp1y/var-templ61.C new file mode 100644 index 000000000000..be2fe0f4423e --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/var-templ61.C @@ -0,0 +1,20 @@ +// PR c++/89512 +// { dg-do compile { target c++14 } } + +struct A { + template + static const int a = 0; +}; + +struct B { + template + static int foo () + { + return T::a; // { dg-error "missing template arguments" } + } +}; + +int bar () +{ + return B::foo (); // { dg-message "required from here" } +}