diff options
author | Richard Guenther <rguenther@suse.de> | 2007-11-16 14:40:04 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2007-11-16 14:40:04 +0000 |
commit | 99739a3e63eb906c77b8acdb76d4f40485eb56fe (patch) | |
tree | b456fc38c0a138350839b7ebdcbf56a53752ed5d /gcc/tree-flow.h | |
parent | bf3bde19e0bf954db21ec98ee179262ec68c5ded (diff) | |
download | gcc-99739a3e63eb906c77b8acdb76d4f40485eb56fe.zip gcc-99739a3e63eb906c77b8acdb76d4f40485eb56fe.tar.gz gcc-99739a3e63eb906c77b8acdb76d4f40485eb56fe.tar.bz2 |
re PR tree-optimization/33870 (miscompiles sqlite)
2007-11-16 Richard Guenther <rguenther@suse.de>
PR tree-optimization/33870
* tree.h (struct tree_memory_tag): Add base_for_components flag.
(struct tree_struct_field_tag): Remove nesting_level field.
(SFT_NESTING_LEVEL): Remove.
(SFT_BASE_FOR_COMPONENTS_P): Add.
* tree-flow.h (struct fieldoff): Remove nesting_level field. Add
base_for_components flag.
(push_fields_onto_fieldstack): Remove nesting_level parameter.
* tree-ssa-alias.c (create_sft): Likewise. Add base_for_components
parameter.
(create_overlap_variables_for): Deal with it.
* tree-dfa.c (dump_subvars_for): Likewise.
(dump_variable): Likewise.
* tree-ssa-structalias.c (push_fields_onto_fieldstack): Likewise.
Set base_for_components for first elements of sub-structures.
(create_variable_info_for): Handle base_for_components.
(set_uids_in_ptset): Always set SFT_UNPARTITIONABLE_P for
pointed-to SFTs if SFT_BASE_FOR_COMPONENTS_P is set.
* tree-ssa-operands.c (ref_nesting_level): Remove.
(add_vars_for_offset): Remove full_ref parameter, always add
the offset of the pointed-to SFT.
(add_virtual_operand): Adjust for changed signature of
add_vars_for_offset.
* gcc.dg/torture/pr33870.c: New testcase.
From-SVN: r130231
Diffstat (limited to 'gcc/tree-flow.h')
-rw-r--r-- | gcc/tree-flow.h | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h index 8376195..4424922 100644 --- a/gcc/tree-flow.h +++ b/gcc/tree-flow.h @@ -1159,22 +1159,21 @@ struct fieldoff /* Field. */ tree decl; - /* Nesting level. This number represents how many structures are - wrapping this field. */ - unsigned nesting_level; - /* Offset from the base of the base containing object to this field. */ HOST_WIDE_INT offset; /* Alias set for the field. */ alias_set_type alias_set; + + /* True, if this offset can be a base for further component accesses. */ + unsigned base_for_components : 1; }; typedef struct fieldoff fieldoff_s; DEF_VEC_O(fieldoff_s); DEF_VEC_ALLOC_O(fieldoff_s,heap); -int push_fields_onto_fieldstack (tree, VEC(fieldoff_s,heap) **, HOST_WIDE_INT, - bool *, tree, unsigned); +int push_fields_onto_fieldstack (tree, VEC(fieldoff_s,heap) **, + HOST_WIDE_INT, bool *, tree); void sort_fieldstack (VEC(fieldoff_s,heap) *); void init_alias_heapvars (void); |