aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture/execute
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2024-07-22 18:05:26 +0200
committerJan Hubicka <hubicka@ucw.cz>2024-07-22 18:05:26 +0200
commit391f46f10b0586c074014de82efe76787739bb0c (patch)
tree3996c03ab4894fdb01ffa6b5d77315fd4dbdf1e3 /gcc/testsuite/gcc.c-torture/execute
parent0d19fbc7b0760ce665fa6a88cd40cfa0311358d7 (diff)
downloadgcc-391f46f10b0586c074014de82efe76787739bb0c.zip
gcc-391f46f10b0586c074014de82efe76787739bb0c.tar.gz
gcc-391f46f10b0586c074014de82efe76787739bb0c.tar.bz2
Fix accounting of offsets in unadjusted_ptr_and_unit_offset
unadjusted_ptr_and_unit_offset accidentally throws away the offset computed by get_addr_base_and_unit_offset. Instead of passing extra_offset it passes offset. PR ipa/114207 gcc/ChangeLog: * ipa-prop.cc (unadjusted_ptr_and_unit_offset): Fix accounting of offsets in ADDR_EXPR. gcc/testsuite/ChangeLog: * gcc.c-torture/execute/pr114207.c: New test.
Diffstat (limited to 'gcc/testsuite/gcc.c-torture/execute')
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr114207.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr114207.c b/gcc/testsuite/gcc.c-torture/execute/pr114207.c
new file mode 100644
index 0000000..052fa85
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr114207.c
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include <stdint.h>
+
+struct S {
+ int a, b;
+};
+
+__attribute__((noinline))
+void foo (struct S *s) {
+ struct S ss = (struct S) {
+ .a = s->b,
+ .b = s->a
+ };
+ *s = ss;
+}
+
+int main() {
+ struct S s = {6, 12};
+ foo(&s);
+ if (s.a != 12 || s.b != 6)
+ __builtin_abort ();
+ return 0;
+}