}
+/* Verify the consistency of call clobbering information. */
+static void
+verify_call_clobbering (void)
+{
+ unsigned int i;
+ bitmap_iterator bi;
+ tree var;
+ referenced_var_iterator rvi;
+
+ /* At all times, the result of the DECL_CALL_CLOBBERED flag should
+ match the result of the call_clobbered_vars bitmap. Verify both
+ that everything in call_clobbered_vars is marked
+ DECL_CALL_CLOBBERED, and that everything marked
+ DECL_CALL_CLOBBERED is in call_clobbered_vars. */
+ EXECUTE_IF_SET_IN_BITMAP (call_clobbered_vars, 0, i, bi)
+ {
+ var = referenced_var (i);
+ if (!MTAG_P (var) && !DECL_CALL_CLOBBERED (var))
+ {
+ error ("variable in call_clobbered_vars but not marked DECL_CALL_CLOBBERED");
+ debug_variable (var);
+ goto err;
+ }
+ }
+ FOR_EACH_REFERENCED_VAR (var, rvi)
+ {
+ if (!MTAG_P (var) && DECL_CALL_CLOBBERED (var)
+ && !bitmap_bit_p (call_clobbered_vars, DECL_UID (var)))
+ {
+ error ("variable marked DECL_CALL_CLOBBERED but not in call_clobbered_vars bitmap.");
+ debug_variable (var);
+ goto err;
+ }
+ }
+ return;
+
+ err:
+ internal_error ("verify_call_clobbering failed");
+}
+
/* Verify the consistency of aliasing information. */
static void
{
verify_flow_sensitive_alias_info ();
verify_name_tags ();
+ verify_call_clobbering ();
verify_flow_insensitive_alias_info ();
}
tree var = SSA_NAME_VAR (t);
tree def = SSA_NAME_DEF_STMT (t);
tree context = (tree) data;
- location_t * locus;
+ location_t *locus;
+ expanded_location xloc, floc;
/* Default uses (indicated by an empty definition statement),
are uninitialized. */
? EXPR_LOCUS (context)
: &DECL_SOURCE_LOCATION (var));
warning (0, gmsgid, locus, var);
+ xloc = expand_location (*locus);
+ floc = expand_location (DECL_SOURCE_LOCATION (cfun->decl));
+ if (xloc.file != floc.file
+ || xloc.line < floc.line
+ || xloc.line > LOCATION_LINE (cfun->function_end_locus))
+ inform ("%J%qD was declared here", var, var);
+
TREE_NO_WARNING (var) = 1;
}
}
}
-static void
+static unsigned int
execute_early_warn_uninitialized (void)
{
block_stmt_iterator bsi;
walk_tree (bsi_stmt_ptr (bsi), warn_uninitialized_var,
context, NULL);
}
+ return 0;
}
-static void
+static unsigned int
execute_late_warn_uninitialized (void)
{
basic_block bb;
FOR_EACH_BB (bb)
for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
warn_uninitialized_phi (phi);
+ return 0;
}
static bool