------- Comment #5 from pault at gcc dot gnu dot org  2010-03-25 21:59 -------
I am a bit lost :-(

(gdb) print ssa_name->common
$6 = {base = {code = SSA_NAME, side_effects_flag = 0, constant_flag = 0, 
    addressable_flag = 0, volatile_flag = 0, readonly_flag = 0, 
    unsigned_flag = 0, asm_written_flag = 0, nowarning_flag = 0, 
    used_flag = 0, nothrow_flag = 0, static_flag = 0, public_flag = 0, 
    private_flag = 0, protected_flag = 0, deprecated_flag = 0, 
    saturating_flag = 0, default_def_flag = 0, lang_flag_0 = 0, 
    lang_flag_1 = 0, lang_flag_2 = 0, lang_flag_3 = 0, lang_flag_4 = 0, 
    lang_flag_5 = 0, lang_flag_6 = 0, visited = 0, packed_flag = 0, 
    user_align = 0, spare = 0, address_space = 0}, chain = 0x0, 
  type = 0x7f9172eced20}
(gdb) print ssa_name->ssa_name.var->common
$7 = {base = {code = VAR_DECL, side_effects_flag = 0, constant_flag = 0, 
    addressable_flag = 0, volatile_flag = 0, readonly_flag = 0, 
    unsigned_flag = 0, asm_written_flag = 0, nowarning_flag = 0, 
    used_flag = 1, nothrow_flag = 0, static_flag = 1, public_flag = 0, 
    private_flag = 0, protected_flag = 0, deprecated_flag = 0, 
    saturating_flag = 0, default_def_flag = 0, lang_flag_0 = 0, 
    lang_flag_1 = 0, lang_flag_2 = 0, lang_flag_3 = 0, lang_flag_4 = 0, 
    lang_flag_5 = 0, lang_flag_6 = 0, visited = 0, packed_flag = 0, 
    user_align = 0, spare = 0, address_space = 0}, chain = 0x0, 
  type = 0x7f9172eced20}

I presume that one being an SSA_NAME and the other being a VAR_DECL is how it
is supposed to be?  Other than that, the types are identical, aren't they?

Equally, eliminating
  if (TREE_TYPE (ssa_name) != TREE_TYPE (SSA_NAME_VAR (ssa_name)))
    {
      error ("type mismatch between an SSA_NAME and its symbol");
      return true;
    }

in tree-ssa.c:verify_ssa_name fixes the problem.

So, we have a sanity check that has no effect that I can see.  Where do these
things get set in the first place?

Paul


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43505

Reply via email to