diff options
author | Martin Jambor <mjambor@suse.cz> | 2013-05-23 15:20:41 +0200 |
---|---|---|
committer | Martin Jambor <jamborm@gcc.gnu.org> | 2013-05-23 15:20:41 +0200 |
commit | 7d2fb5244ba6c3c48222327e8ebc6883fa5c819e (patch) | |
tree | b293e3ccbf8e0a029d6133c38c71e73dd385f953 /gcc/tree.c | |
parent | 877251155ba19212871966c65f4a283907eeb54e (diff) | |
download | gcc-7d2fb5244ba6c3c48222327e8ebc6883fa5c819e.zip gcc-7d2fb5244ba6c3c48222327e8ebc6883fa5c819e.tar.gz gcc-7d2fb5244ba6c3c48222327e8ebc6883fa5c819e.tar.bz2 |
re PR middle-end/57347 (wrong code for bitfield on x86_64-linux at -Os and above)
2013-05-22 Martin Jambor <mjambor@suse.cz>
PR middle-end/57347
* tree.h (contains_bitfld_component_ref_p): Declare.
* tree-sra.c (contains_bitfld_comp_ref_p): Move...
* tree.c (contains_bitfld_component_ref_p): ...here. Adjust its caller.
* ipa-prop.c (determine_known_aggregate_parts): Check that LHS does
not access a bit-field. Assert all final offsets are byte-aligned.
testsuite/
* gcc.dg/ipa/pr57347.c: New test.
From-SVN: r199252
Diffstat (limited to 'gcc/tree.c')
-rw-r--r-- | gcc/tree.c | 17 |
1 files changed, 17 insertions, 0 deletions
@@ -11785,4 +11785,21 @@ warn_deprecated_use (tree node, tree attr) } } +/* Return true if REF has a COMPONENT_REF with a bit-field field declaration + somewhere in it. */ + +bool +contains_bitfld_component_ref_p (const_tree ref) +{ + while (handled_component_p (ref)) + { + if (TREE_CODE (ref) == COMPONENT_REF + && DECL_BIT_FIELD (TREE_OPERAND (ref, 1))) + return true; + ref = TREE_OPERAND (ref, 0); + } + + return false; +} + #include "gt-tree.h" |