https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79821
--- Comment #9 from ro at CeBiTec dot Uni-Bielefeld.DE <ro at CeBiTec dot Uni-Bielefeld.DE> --- > --- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> --- > (In reply to r...@cebitec.uni-bielefeld.de from comment #6) [...] > Ah, so it will be most likely that > DW_AT_const_value: floating-point or vector constant > > We have: > dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec; > and > struct GTY(()) dw_vec_const { > unsigned char * GTY((atomic)) array; > unsigned length; > unsigned elt_size; > }; > > If we are calling strlen on that array, that is obviously incorrect, because > the array contains random bytes. > We need some way to tell GC that the array has length * elt_size size. I'd already wondered about this: (gdb) display/i $pc 1: x/i $pc => 0xfed6c634 <strlen+148>: ld [ %o2 ], %o1 (gdb) p/x $o2 $1 = 0xf9400000 #1 0x009e0208 in gt_pch_note_object (obj=0xf93ffff8, note_ptr_cookie=0xf93ffff8, note_ptr_fn=0xcfe544 <gt_pch_p_S(void*, void*, void (*)(void*, void*), void*)>) at /var/gcc/reghunt/trunk/gcc/ggc-common.c:285 285 (*slot)->size = strlen ((const char *)obj) + 1; (gdb) p obj $2 = (void *) 0xf93ffff8 (gdb) p (char *)obj $4 = 0xf93ffff8 "\001\257\257\257\257\257\257\257"<error: Cannot access memory at address 0xf9400000> where obj doesn't look like a string ;-)