]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c++: Fix a pasto in the PR120471 fix [PR120940]
authorJakub Jelinek <jakub@redhat.com>
Thu, 3 Jul 2025 20:39:39 +0000 (22:39 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 3 Jul 2025 20:42:16 +0000 (22:42 +0200)
No idea how this slipped in, I'm terribly sorry.
Strangely nothing in the testsuite has caught this, so I've added
a new test for that.

2025-07-03  Jakub Jelinek  <jakub@redhat.com>

PR c++/120940
* typeck.cc (cp_build_array_ref): Fix a pasto.

* g++.dg/parse/pr120940.C: New test.
* g++.dg/warn/Wduplicated-branches9.C: New test.

gcc/cp/typeck.cc
gcc/testsuite/g++.dg/parse/pr120940.C [new file with mode: 0644]
gcc/testsuite/g++.dg/warn/Wduplicated-branches9.C [new file with mode: 0644]

index 447fe810633ddb2b24491f721bb50f086f34682a..0bf5ae4e4e2654a5ccd4f759b31491e3a5f21c66 100644 (file)
@@ -4004,7 +4004,7 @@ cp_build_array_ref (location_t loc, tree array, tree idx,
       tree op0, op1, op2;
       op0 = TREE_OPERAND (array, 0);
       op1 = TREE_OPERAND (array, 1);
-      op2 = TREE_OPERAND (array, 1);
+      op2 = TREE_OPERAND (array, 2);
       if (TREE_SIDE_EFFECTS (idx) || !tree_invariant_p (idx))
        {
          /* If idx could possibly have some SAVE_EXPRs, turning
diff --git a/gcc/testsuite/g++.dg/parse/pr120940.C b/gcc/testsuite/g++.dg/parse/pr120940.C
new file mode 100644 (file)
index 0000000..5da36b2
--- /dev/null
@@ -0,0 +1,18 @@
+// PR c++/120940
+// { dg-do run }
+
+int a[8] = { 1, 2, 3, 4, 5, 6, 7, 8 };
+int b[8] = { 9, 10, 11, 12, 13, 14, 15, 16 };
+
+__attribute__((noipa)) int
+foo (int x, int y)
+{
+  return (x ? a : b)[y];
+}
+
+int
+main ()
+{
+  if (foo (1, 4) != 5 || foo (0, 6) != 15)
+    __builtin_abort ();
+}
diff --git a/gcc/testsuite/g++.dg/warn/Wduplicated-branches9.C b/gcc/testsuite/g++.dg/warn/Wduplicated-branches9.C
new file mode 100644 (file)
index 0000000..f9fafcd
--- /dev/null
@@ -0,0 +1,11 @@
+// PR c++/120940
+// { dg-do compile }
+// { dg-options "-Wduplicated-branches" }
+
+static char a[16][8], b[16][8];
+
+char *
+foo (int x, int y)
+{
+  return (x ? a : b)[y];
+}