diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2024-07-22 18:05:26 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@ucw.cz> | 2024-07-22 18:05:26 +0200 |
commit | 391f46f10b0586c074014de82efe76787739bb0c (patch) | |
tree | 3996c03ab4894fdb01ffa6b5d77315fd4dbdf1e3 /gcc/testsuite/gcc.c-torture/execute | |
parent | 0d19fbc7b0760ce665fa6a88cd40cfa0311358d7 (diff) | |
download | gcc-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.c | 23 |
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; +} |