newvar = create_alias_var (decl);
/* Assign globals to global var for purposes of intraprocedural
analysis. */
- if ((DECL_CONTEXT (decl) == NULL
- || TREE_PUBLIC (decl)
- || TREE_STATIC (decl)
- || decl_function_context (decl) == NULL)
- && decl != pta_global_var)
+ if (TREE_STATIC (decl) && decl != pta_global_var)
{
current_alias_ops->addr_assign (current_alias_ops,
get_alias_var (pta_global_var),
switch (TREE_CODE (expr))
{
case ARRAY_REF:
+ case ARRAY_RANGE_REF:
{
- /* Find the first non-array ref, and return it's alias
- variable */
+ /* Find the first non-array ref, and return its alias variable. */
tree p;
- for (p = expr; TREE_CODE (p) == ARRAY_REF;
- p = TREE_OPERAND (p, 0));
+
+ for (p = expr;
+ TREE_CODE (p) == ARRAY_REF || TREE_CODE (p) == ARRAY_RANGE_REF;
+ p = TREE_OPERAND (p, 0))
+ ;
return get_alias_var (p);
}
break;
{
op0 = TREE_OPERAND (stp, 0);
op1 = TREE_OPERAND (stp, 1);
+ if (TREE_CODE (op1) == WITH_SIZE_EXPR)
+ op1 = TREE_OPERAND (op1, 0);
}
+
/* lhsAV should always have an alias variable */
lhsAV = get_alias_var (op0);
if (!lhsAV)
else if (TREE_CODE (op1) == CALL_EXPR)
{
/* Heap assignment. These are __attribute__ malloc or
- something, i'll deal with it later. */
+ something, I'll deal with it later. */
if (0)
{}
else
{
var = TREE_VALUE (vars);
if (TREE_CODE (var) != LABEL_DECL
- && decl_function_context (var) == NULL
+ && TREE_STATIC (var)
&& DECL_INITIAL (var))
find_func_aliases (var);
}
pta_global_var = NULL_TREE;
}
+static bool
+gate_pta (void)
+{
+#ifdef HAVE_BANSHEE
+ return flag_tree_points_to != PTA_NONE;
+#else
+ return false;
+#endif
+}
+
struct tree_opt_pass pass_build_pta =
{
"pta", /* name */
- NULL, /* gate */
+ gate_pta, /* gate */
create_alias_vars, /* execute */
NULL, /* sub */
NULL, /* next */
{
size_t i;
- if (flag_tree_points_to != PTA_ANDERSEN)
- return;
-
for (i = 0; i < VARRAY_ACTIVE_SIZE (local_alias_vars); i++)
{
tree key = VARRAY_TREE (local_alias_vars, i);
struct tree_opt_pass pass_del_pta =
{
"pta", /* name */
- NULL, /* gate */
+ gate_pta, /* gate */
delete_alias_vars, /* execute */
NULL, /* sub */
NULL, /* next */