diff options
author | Martin Sebor <msebor@redhat.com> | 2021-04-28 19:11:34 -0600 |
---|---|---|
committer | Martin Sebor <msebor@redhat.com> | 2021-04-28 19:11:34 -0600 |
commit | 2c8bffa184dffba7976ba807ef0a1bbb6f66aa2d (patch) | |
tree | 337798e34868e1f8e21248cdbd8677261763bd26 /gcc | |
parent | 2de7c792569d7a227426aaeb124686a856614da7 (diff) | |
download | gcc-2c8bffa184dffba7976ba807ef0a1bbb6f66aa2d.zip gcc-2c8bffa184dffba7976ba807ef0a1bbb6f66aa2d.tar.gz gcc-2c8bffa184dffba7976ba807ef0a1bbb6f66aa2d.tar.bz2 |
PR middle-end/100250 - ICE related to -Wmaybe-uninitialized
gcc/ChangeLog:
PR middle-end/100250
* attribs.c (attr_access::array_as_string): Avoid dereferencing
a pointer when it's null.
gcc/testsuite/ChangeLog:
PR middle-end/100250
* gcc.dg/uninit-pr100250.c: New test.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/attribs.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/uninit-pr100250.c | 29 |
2 files changed, 31 insertions, 1 deletions
diff --git a/gcc/attribs.c b/gcc/attribs.c index 3ffa1b6..ebc0783 100644 --- a/gcc/attribs.c +++ b/gcc/attribs.c @@ -2388,7 +2388,8 @@ attr_access::array_as_string (tree type) const const char *p = end; for ( ; p != str && *p-- != ']'; ); if (*p == '$') - index_type = build_index_type (TREE_VALUE (size)); + /* SIZE may have been cleared. Use it with care. */ + index_type = build_index_type (size ? TREE_VALUE (size) : size); } else if (minsize) index_type = build_index_type (size_int (minsize - 1)); diff --git a/gcc/testsuite/gcc.dg/uninit-pr100250.c b/gcc/testsuite/gcc.dg/uninit-pr100250.c new file mode 100644 index 0000000..8e7a787 --- /dev/null +++ b/gcc/testsuite/gcc.dg/uninit-pr100250.c @@ -0,0 +1,29 @@ +/* PR middle-end/100250 - ICE related to -Wmaybe-uninitialized + { dg-do compile } + { dg-options "-O2 -Wall" } */ + +extern void f (int D, const int[D], const int[D]); + +void g (int D, const int a[D], const int b[D], const int c[D], const int d[D]) +{ + int c2[D]; + + for (int i = 0; i < D; i++) { + + if (a[i] >= D) __builtin_abort (); + if (b[i] != d[a[i]]) __builtin_abort (); + + c2[a[i]] = c[i]; + } + + f (D, d, c2); +} + +void h (int D, const int d[D]) +{ + int a[D]; + int b[D]; + int c[D]; + + g (D, a, b, c, d); // { dg-warning "-Wmaybe-uninitialized" } +} |