aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-03-14 09:14:48 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2019-03-14 09:14:48 +0100
commitb2725ea5df920e68591375847c0310254020eec7 (patch)
tree898cefc46e0c617c71ce27643bef4f2b5907ebf9 /gcc
parent0ee285909bcef729415995e16c68e8713c59996f (diff)
downloadgcc-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/ChangeLog3
-rw-r--r--gcc/cp/semantics.c8
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/var-templ61.C20
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" }
+}