[Bug c++/79821] [7 regression] SEGV in cc1plus compiling 64-bit stdc++.h.gch/O2g.gch
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Mar 6 11:05:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79821
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(In reply to ro@CeBiTec.Uni-Bielefeld.DE from comment #6)
> > --- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
> > If you up from the ICE case up to gt_pch_nx_die_struct frame, it would be
> > interesting if you can figure out what x is would be print_die (x, stderr)
>
> I get
>
> DIE 0: DW_TAG_member (f821cdb0)
> abbrev id: 0 offset: 0 mark: 0
> DW_AT_name: "is_specialized"
> DW_AT_decl_file:
> "/var/gcc/reghunt/pch-segv/36684/sparc-sun-solaris2.12/sparcv9/libstdc++-v3/
> include/limits" (0)
> DW_AT_decl_line: 385
> DW_AT_type: die -> 0 (fb6a4c60)
> DW_AT_external: 1
> DW_AT_declaration: 1
> DW_AT_const_value: floating-point or vector constant
> DW_AT_const_expr: 1
>
> for the innermost call to gt_pch_nx_die_struct.
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.
More information about the Gcc-bugs
mailing list