[gcc r10-9471] c++: Fix up build_zero_init_1 once more [PR99106]
Jakub Jelinek
jakub@gcc.gnu.org
Fri Mar 19 23:29:22 GMT 2021
https://gcc.gnu.org/g:af868e89ec21340d1cafd26eaed356ce4b0104c3
commit r10-9471-gaf868e89ec21340d1cafd26eaed356ce4b0104c3
Author: Jakub Jelinek <jakub@redhat.com>
Date: Wed Feb 17 15:03:25 2021 +0100
c++: Fix up build_zero_init_1 once more [PR99106]
My earlier build_zero_init_1 patch for flexible array members created
an empty CONSTRUCTOR. As the following testcase shows, that doesn't work
very well because the middle-end doesn't expect CONSTRUCTOR elements with
incomplete type (that the empty CONSTRUCTOR at the end of outer CONSTRUCTOR
had).
The following patch just doesn't add any CONSTRUCTOR for the flexible array
members, it doesn't seem to be needed.
2021-02-17 Jakub Jelinek <jakub@redhat.com>
PR sanitizer/99106
* init.c (build_zero_init_1): For flexible array members just return
NULL_TREE instead of returning empty CONSTRUCTOR with non-complete
ARRAY_TYPE.
* g++.dg/ubsan/pr99106.C: New test.
(cherry picked from commit 7768cadb4246117964a9ba159740da3b9c20811d)
Diff:
---
gcc/cp/init.c | 2 +-
gcc/testsuite/g++.dg/ubsan/pr99106.C | 5 +++++
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index bbd33f46697..878099ecaad 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -251,7 +251,7 @@ build_zero_init_1 (tree type, tree nelts, bool static_storage_p,
build_one_cst (TREE_TYPE (nelts)));
/* Treat flexible array members like [0] arrays. */
else if (TYPE_DOMAIN (type) == NULL_TREE)
- max_index = build_minus_one_cst (sizetype);
+ return NULL_TREE;
else
max_index = array_type_nelts (type);
diff --git a/gcc/testsuite/g++.dg/ubsan/pr99106.C b/gcc/testsuite/g++.dg/ubsan/pr99106.C
new file mode 100644
index 00000000000..ccb48a96f4b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ubsan/pr99106.C
@@ -0,0 +1,5 @@
+// PR sanitizer/99106
+// { dg-do compile }
+// { dg-options "-fsanitize=undefined" }
+
+#include "../ext/flexary38.C"
More information about the Gcc-cvs
mailing list