PR c++/84665 - ICE with array of empty class.
authorJason Merrill <jason@redhat.com>
Thu, 5 Apr 2018 16:04:08 +0000 (12:04 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 5 Apr 2018 16:04:08 +0000 (12:04 -0400)
* decl2.c (cp_check_const_attributes): Use fold_non_dependent_expr.

From-SVN: r259132

gcc/cp/ChangeLog
gcc/cp/decl2.c
gcc/testsuite/g++.dg/ext/attr-noinline-4.C [new file with mode: 0644]

index cd3e36323c3bf0fee51c6b939db7612d8af878c6..b453577fa14b699f68b2a8b2f2338cec5650075e 100644 (file)
@@ -1,5 +1,8 @@
 2018-04-05  Jason Merrill  <jason@redhat.com>
 
+       PR c++/84665 - ICE with array of empty class.
+       * decl2.c (cp_check_const_attributes): Use fold_non_dependent_expr.
+
        PR c++/85228 - ICE with lambda in enumerator in template.
        * pt.c (bt_instantiate_type_proc): Don't assume
        CLASSTYPE_TEMPLATE_INFO is non-null.
index 6078fb668a766039b1e8ab8e44cb6ba33aae100f..b0bf8241f7164b5d3d3be8d58484a817d950ddbd 100644 (file)
@@ -1416,7 +1416,7 @@ cp_check_const_attributes (tree attributes)
        {
          tree expr = TREE_VALUE (arg);
          if (EXPR_P (expr))
-           TREE_VALUE (arg) = maybe_constant_value (expr);
+           TREE_VALUE (arg) = fold_non_dependent_expr (expr);
        }
     }
 }
diff --git a/gcc/testsuite/g++.dg/ext/attr-noinline-4.C b/gcc/testsuite/g++.dg/ext/attr-noinline-4.C
new file mode 100644 (file)
index 0000000..27c7ae8
--- /dev/null
@@ -0,0 +1,10 @@
+// PR c++/84665
+
+struct S {} a[1];
+
+template <int N>
+void
+foo ()
+{
+  __attribute__ ((noinline (a[0]))) int c = 0; // { dg-error "wrong number of arguments" }
+}