diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-03-14 09:14:48 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-03-14 09:14:48 +0100 |
commit | b2725ea5df920e68591375847c0310254020eec7 (patch) | |
tree | 898cefc46e0c617c71ce27643bef4f2b5907ebf9 /gcc | |
parent | 0ee285909bcef729415995e16c68e8713c59996f (diff) | |
download | gcc-b2725ea5df920e68591375847c0310254020eec7.zip gcc-b2725ea5df920e68591375847c0310254020eec7.tar.gz gcc-b2725ea5df920e68591375847c0310254020eec7.tar.bz2 |
re PR c++/89512 (ICE in get_expr_operands, at tree-ssa-operands.c:882)
PR c++/89512
* semantics.c (finish_qualified_id_expr): Reject variable templates.
* g++.dg/cpp1y/var-templ61.C: New test.
From-SVN: r269672
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/var-templ61.C | 20 |
4 files changed, 34 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7c0b4f4..054a891 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2019-03-14 Jakub Jelinek <jakub@redhat.com> + PR c++/89512 + * semantics.c (finish_qualified_id_expr): Reject variable templates. + PR c++/89652 * constexpr.c (struct constexpr_ctx): Change save_exprs type from hash_set<tree> to vec<tree>. diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 798a2b3..fcf0606 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -2112,6 +2112,14 @@ finish_qualified_id_expr (tree qualifying_class, expr = build_offset_ref (qualifying_class, expr, /*address_p=*/false, complain); } + 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 73ac51a..dbd918c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2019-03-14 Jakub Jelinek <jakub@redhat.com> + PR c++/89512 + * g++.dg/cpp1y/var-templ61.C: New test. + PR c++/89652 * g++.dg/cpp1y/constexpr-89652.C: New test. 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 0000000..be2fe0f --- /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 <typename T> + static const int a = 0; +}; + +struct B { + template <typename T> + static int foo () + { + return T::a; // { dg-error "missing template arguments" } + } +}; + +int bar () +{ + return B::foo<A> (); // { dg-message "required from here" } +} |