------- Comment #8 from jakub at gcc dot gnu dot org 2009-09-19 10:50 ------- The "ret" string is shared between some attribute and a value from CONST_STRING. But prune_unused_types_walk_attribs resets the count to 0: /* Set the string's refcount to 0 so that prune_unused_types_mark accounts properly for it. */ if (AT_class (a) == dw_val_class_str) a->dw_attr_val.v.val_str->refcount = 0; and while attributes are walked, location lists are not and thus nothing notices it is still used. I'll have to read the prune_unused_types stuff carefully to understand how this can be fixed, ideally if we could just decrement refcount in prune_unused_types_walk_attribs, as long as we are sure it is walked for all attributes, it could fix this. Alternatively we'd have to walk all location lists as well, looking for labels for strings.
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41404