diff options
author | Martin Sebor <msebor@redhat.com> | 2020-10-12 09:35:02 -0600 |
---|---|---|
committer | Martin Sebor <msebor@redhat.com> | 2020-10-12 09:36:26 -0600 |
commit | 1be51a3a9ac3409561223c8058d4943f9b574d15 (patch) | |
tree | e332d3ec5e66c8e0c51b13b551a8e7fa182eafb2 /gcc/cp/error.c | |
parent | 83685efd5fd1623cfc4e4c435ce2773d95d458d1 (diff) | |
download | gcc-1be51a3a9ac3409561223c8058d4943f9b574d15.zip gcc-1be51a3a9ac3409561223c8058d4943f9b574d15.tar.gz gcc-1be51a3a9ac3409561223c8058d4943f9b574d15.tar.bz2 |
PR c++/97201 - ICE in -Warray-bounds writing to result of operator new(0)
gcc/cp/ChangeLog:
PR c++/97201
* error.c (dump_type_suffix): Handle both the C and C++ forms of
zero-length arrays.
libstdc++-v3/ChangeLog:
PR c++/97201
* libsupc++/new (operator new): Add attribute alloc_size and malloc.
gcc/testsuite/ChangeLog:
PR c++/97201
* g++.dg/warn/Wplacement-new-size-8.C: Adjust expected message.
* g++.dg/warn/Warray-bounds-10.C: New test.
* g++.dg/warn/Warray-bounds-11.C: New test.
* g++.dg/warn/Warray-bounds-12.C: New test.
* g++.dg/warn/Warray-bounds-13.C: New test.
Diffstat (limited to 'gcc/cp/error.c')
-rw-r--r-- | gcc/cp/error.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/cp/error.c b/gcc/cp/error.c index ad22b00..396558b 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -951,8 +951,11 @@ dump_type_suffix (cxx_pretty_printer *pp, tree t, int flags) if (tree dtype = TYPE_DOMAIN (t)) { tree max = TYPE_MAX_VALUE (dtype); - /* Zero-length arrays have an upper bound of SIZE_MAX. */ - if (integer_all_onesp (max)) + /* Zero-length arrays have a null upper bound in C and SIZE_MAX + in C++. Handle both since the type might be constructed by + the middle end and end up here as a result of a warning (see + PR c++/97201). */ + if (!max || integer_all_onesp (max)) pp_character (pp, '0'); else if (tree_fits_shwi_p (max)) pp_wide_integer (pp, tree_to_shwi (max) + 1); |