aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-flow.h
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2007-11-16 14:40:04 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2007-11-16 14:40:04 +0000
commit99739a3e63eb906c77b8acdb76d4f40485eb56fe (patch)
treeb456fc38c0a138350839b7ebdcbf56a53752ed5d /gcc/tree-flow.h
parentbf3bde19e0bf954db21ec98ee179262ec68c5ded (diff)
downloadgcc-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.h11
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);