aboutsummaryrefslogtreecommitdiff
path: root/libjava/classpath/java
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2026-02-09 10:31:10 +0100
committerMartin Jambor <jamborm@gcc.gnu.org>2026-02-09 10:31:28 +0100
commit538da7baf6aee075ad13e0b654bd9cc6c9db193a (patch)
treeb21fc6e70aaebbe7363c8de6b59de5e35c3e9305 /libjava/classpath/java
parent4e13b78bf0e28120d4b1595313c42a1de83fc3ed (diff)
downloadgcc-538da7baf6aee075ad13e0b654bd9cc6c9db193a.zip
gcc-538da7baf6aee075ad13e0b654bd9cc6c9db193a.tar.gz
gcc-538da7baf6aee075ad13e0b654bd9cc6c9db193a.tar.bz2
tree-sra: Do not propagate bit-field accesses across assignments (PR 117217)
On master at least, this is a bug which no longer reproduces with the provided test-cases because after r15-5747-gfd62fdc5e1b3c4:(Jakub Jelinek: c++: Small initial fixes for zeroing of padding bits [PR117256]), the input to SRA looks very different and SRA does not do anything. However, before that commit, SRA sees the following input and if it encountered something similar now, it could still misbehave in the same way: D.2908.i = 0; D.2908.b = 0; e ={v} {CLOBBER(bob)}; e.b = MEM[(const struct B &)&D.2908]; D.2908 ={v} {CLOBBER(eos)}; (Where the "e" in "e.b" is actually a MEM_REF of the union type into &e so that is why the "data" field is missing.) Field D.2908.b is a SRA candidate of boolean type and has size 1 bit because its decl has size 1 bit even though its type has size 8 bits. The SRA access representing the store to D.2908.b is then propagated across the assignment to e and in the process build_user_friendly_ref_for_offset tries to find a nice expression for it to possibly use in warnings. It finds types_compatible_p e.data.a.b which however has size 8 bits and so the verifier screams when it discovers the discrepancy from the copied-over size of 1 bit. This patch avoids the situation by refusing to propagate non-byte-sized accesses across assignments. gcc/ChangeLog: 2026-02-06 Martin Jambor <mjambor@suse.cz> PR tree-optimization/117217 * tree-sra.cc (propagate_subaccesses_from_rhs): Do not propagate bit-field children. (propagate_subaccesses_from_lhs): Likewise. gcc/testsuite/ChangeLog: 2026-02-06 Martin Jambor <mjambor@suse.cz> PR tree-optimization/117217 * g++.dg/torture/pr117217-1.C: New test. * g++.dg/torture/pr117217-2.C: Likewise.
Diffstat (limited to 'libjava/classpath/java')
0 files changed, 0 insertions, 0 deletions