------- Comment #3 from rguenth at gcc dot gnu dot org 2009-07-17 15:40 ------- confvar.i:
struct variable { const char *string; }; struct variable table[] = { }; getconf.i: struct variable { const char *string; }; extern struct variable table[]; int main(int argc, char *argv[]) { struct variable *p; for(p = table; p->string; p++) ; } > ./xgcc -B. confvar.3.i getconf.3.i -flto -O In function 'main': lto1: error: address taken, but ADDRESSABLE bit not set PHI argument &table[0]; for PHI node p_1 = PHI <&table[0](2), p_4(3)> lto1: internal compiler error: verify_ssa failed Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. as table is a global variable this is likely just a verifier issue - the TREE_ADDRESSABLE state of non-static variables is not relevant (still it seems it's not properly merged). With -fwhole-program table should be promoted to static, thus TREE_ADDRESSABLE should be merged here. Like the following, which fixes the testcase: Index: lto-symtab.c =================================================================== --- lto-symtab.c (revision 149739) +++ lto-symtab.c (working copy) @@ -572,6 +572,9 @@ lto_symtab_merge_decl (tree new_decl, if (!lto_symtab_compatible (old_decl, new_decl)) return; + /* Merge decl state. */ + TREE_ADDRESSABLE (old_decl) |= TREE_ADDRESSABLE (new_decl); + old_resolution = lto_symtab_get_resolution (old_decl); gcc_assert (resolution != LDPR_UNKNOWN && resolution != LDPR_UNDEF -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- AssignedTo|unassigned at gcc dot gnu |rguenth at gcc dot gnu dot |dot org |org Status|NEW |ASSIGNED Last reconfirmed|2009-07-15 15:15:34 |2009-07-17 15:40:25 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40765