aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2024-10-22 11:46:47 +0200
committerRichard Biener <rguenth@gcc.gnu.org>2024-10-22 13:25:48 +0200
commitd464a52d0678dfea523a60efe8b792ba1b8d40db (patch)
tree80f43c5901fa58af83c110d1ab0e758f86a876b8
parenta6b26e5ea09779bf276dff52a6692f3bb655d230 (diff)
downloadgcc-d464a52d0678dfea523a60efe8b792ba1b8d40db.zip
gcc-d464a52d0678dfea523a60efe8b792ba1b8d40db.tar.gz
gcc-d464a52d0678dfea523a60efe8b792ba1b8d40db.tar.bz2
tree-optimization/117254 - ICE with access diangostics
The diagnostics code fails to handle non-constant domain max. PR tree-optimization/117254 * gimple-ssa-warn-access.cc (maybe_warn_nonstring_arg): Check the array domain max is constant before using it. * gcc.dg/pr117254.c: New testcase.
-rw-r--r--gcc/gimple-ssa-warn-access.cc3
-rw-r--r--gcc/testsuite/gcc.dg/pr117254.c10
2 files changed, 12 insertions, 1 deletions
diff --git a/gcc/gimple-ssa-warn-access.cc b/gcc/gimple-ssa-warn-access.cc
index 950d96b..5061af3 100644
--- a/gcc/gimple-ssa-warn-access.cc
+++ b/gcc/gimple-ssa-warn-access.cc
@@ -607,7 +607,8 @@ maybe_warn_nonstring_arg (tree fndecl, GimpleOrTree exp)
{
if (tree arrbnd = TYPE_DOMAIN (type))
{
- if ((arrbnd = TYPE_MAX_VALUE (arrbnd)))
+ if ((arrbnd = TYPE_MAX_VALUE (arrbnd))
+ && TREE_CODE (arrbnd) == INTEGER_CST)
{
asize = wi::to_offset (arrbnd) + 1;
known_size = true;
diff --git a/gcc/testsuite/gcc.dg/pr117254.c b/gcc/testsuite/gcc.dg/pr117254.c
new file mode 100644
index 0000000..c7a5106
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr117254.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+int g;
+void e(int s) {
+ struct {
+ __attribute__((nonstring)) char bn[g];
+ } f;
+ __builtin_strncpy (f.bn, f.bn, s);
+}