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 ;-)

Reply via email to