aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-04-06 19:28:54 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2018-04-06 19:28:54 +0200
commitc617fb562d510101b5445464753858a557020acb (patch)
treeca7aea9f6caf538d42053af6fca7c822bc66bc11
parent49574486e65c03100fbf2993804ccc6dbb9051e6 (diff)
downloadgcc-c617fb562d510101b5445464753858a557020acb.zip
gcc-c617fb562d510101b5445464753858a557020acb.tar.gz
gcc-c617fb562d510101b5445464753858a557020acb.tar.bz2
re PR debug/85252 (ICE with -g for static zero-length array initialization)
PR debug/85252 * dwarf2out.c (rtl_for_decl_init): For STRING_CST initializer only build CONST_STRING if TYPE_MAX_VALUE is non-NULL and is INTEGER_CST. * gcc.dg/debug/pr85252.c: New test. From-SVN: r259183
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/dwarf2out.c2
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.dg/debug/pr85252.c11
4 files changed, 20 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1a8fcf6..c82d2bc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2018-04-06 Jakub Jelinek <jakub@redhat.com>
+ PR debug/85252
+ * dwarf2out.c (rtl_for_decl_init): For STRING_CST initializer only
+ build CONST_STRING if TYPE_MAX_VALUE is non-NULL and is INTEGER_CST.
+
PR rtl-optimization/84872
* cfgloopmanip.c (create_preheader): Use make_forwarder_block even if
nentry == 1 when CP_FALLTHRU_PREHEADERS and single_entry is
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 7933054..50a41c5 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -19596,6 +19596,8 @@ rtl_for_decl_init (tree init, tree type)
if (is_int_mode (TYPE_MODE (enttype), &mode)
&& GET_MODE_SIZE (mode) == 1
&& domain
+ && TYPE_MAX_VALUE (domain)
+ && TREE_CODE (TYPE_MAX_VALUE (domain)) == INTEGER_CST
&& integer_zerop (TYPE_MIN_VALUE (domain))
&& compare_tree_int (TYPE_MAX_VALUE (domain),
TREE_STRING_LENGTH (init) - 1) == 0
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 25cda50..4ab768d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2018-04-06 Jakub Jelinek <jakub@redhat.com>
+ PR debug/85252
+ * gcc.dg/debug/pr85252.c: New test.
+
PR rtl-optimization/84872
* gcc.dg/graphite/pr84872.c: New test.
diff --git a/gcc/testsuite/gcc.dg/debug/pr85252.c b/gcc/testsuite/gcc.dg/debug/pr85252.c
new file mode 100644
index 0000000..6e5ca85
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/debug/pr85252.c
@@ -0,0 +1,11 @@
+/* PR debug/85252 */
+/* { dg-do compile } */
+
+void
+foo (void)
+{
+ static char a[0] = "";
+ static char b[0] = "b"; /* { dg-warning "initializer-string for array of chars is too long" } */
+ static char c[1] = "c";
+ static char d[1] = "de"; /* { dg-warning "initializer-string for array of chars is too long" } */
+}