re PR middle-end/78201 (ICE in tree_to_shwi, at tree.h:4037 (seen both on ARM32 an...
authorJakub Jelinek <jakub@redhat.com>
Thu, 17 Nov 2016 17:09:13 +0000 (18:09 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 17 Nov 2016 17:09:13 +0000 (18:09 +0100)
PR middle-end/78201
* varasm.c (default_use_anchors_for_symbol_p): Fix a comment typo.
Don't test decl != NULL.  Don't look at DECL_SIZE, but DECL_SIZE_UNIT
instead, return false if it is NULL, or doesn't fit into uhwi, or
is larger or equal to targetm.max_anchor_offset.

* g++.dg/opt/pr78201.C: New test.

From-SVN: r242555

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/opt/pr78201.C [new file with mode: 0644]
gcc/varasm.c

index bc2b86c5070b2545d7374a175e7a4643001ec259..0967e8dcb828e11f04c7da420dfb8eaeb4eb95ce 100644 (file)
@@ -1,3 +1,11 @@
+2016-11-17  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/78201
+       * varasm.c (default_use_anchors_for_symbol_p): Fix a comment typo.
+       Don't test decl != NULL.  Don't look at DECL_SIZE, but DECL_SIZE_UNIT
+       instead, return false if it is NULL, or doesn't fit into uhwi, or
+       is larger or equal to targetm.max_anchor_offset.
+
 2016-11-17  Pip Cet  <pipcet@gmail.com>
             Eric Botcazou  <ebotcazou@adacore.com>
 
index dc7ab84e86ffa1c805504cb14659050e99b8e77e..cce390bb7448d9dca7a0ab1159804afeb64bcefd 100644 (file)
@@ -1,3 +1,8 @@
+2016-11-17  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/78201
+       * g++.dg/opt/pr78201.C: New test.
+
 2016-11-17  Christophe Lyon  <christophe.lyon@linaro.org>
 
        * gcc.dg/pr78333.c: Add empty implementations of
diff --git a/gcc/testsuite/g++.dg/opt/pr78201.C b/gcc/testsuite/g++.dg/opt/pr78201.C
new file mode 100644 (file)
index 0000000..82567bc
--- /dev/null
@@ -0,0 +1,13 @@
+// PR middle-end/78201
+// { dg-do compile }
+// { dg-options "-O2" }
+
+struct B { long d (); } *c;
+long e;
+
+void
+foo ()
+{
+  char a[e] = "";
+  c && c->d();
+}
index 6a7ffc22e2239c76fac267e9ef8abdb04c76c15f..1c711b1d8c8b8b20824f91e60e1a00bde9249173 100644 (file)
@@ -6804,11 +6804,12 @@ default_use_anchors_for_symbol_p (const_rtx symbol)
        return false;
 
       /* Don't use section anchors for decls that won't fit inside a single
-        anchor range to reduce the amount of instructions require to refer
+        anchor range to reduce the amount of instructions required to refer
         to the entire declaration.  */
-      if (decl && DECL_SIZE (decl)
-        && tree_to_shwi (DECL_SIZE (decl))
-           >= (targetm.max_anchor_offset * BITS_PER_UNIT))
+      if (DECL_SIZE_UNIT (decl) == NULL_TREE
+         || !tree_fits_uhwi_p (DECL_SIZE_UNIT (decl))
+         || (tree_to_uhwi (DECL_SIZE_UNIT (decl))
+             >= (unsigned HOST_WIDE_INT) targetm.max_anchor_offset))
        return false;
 
     }