Message ID | ZboGVzhsLbQDIRGV@tucnak |
---|---|
State | New |
Headers | show |
Series | dwarf2out: Fix ICE on large _BitInt in loc_list_from_tree_1 [PR113637] | expand |
On Wed, 31 Jan 2024, Jakub Jelinek wrote: > Hi! > > This spot uses SCALAR_INT_TYPE_MODE which obviously ICEs for large/huge > BITINT_TYPE types which have BLKmode. But such large BITINT_TYPEs certainly > don't fit into DWARF2_ADDR_SIZE either, so we can just assume it would be > false if type has BLKmode. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? OK > 2024-01-31 Jakub Jelinek <jakub@redhat.com> > > PR debug/113637 > * dwarf2out.cc (loc_list_from_tree_1): Assume integral types > with BLKmode are larger than DWARF2_ADDR_SIZE. > > * gcc.dg/bitint-80.c: New test. > > --- gcc/dwarf2out.cc.jj 2024-01-24 13:11:21.132468150 +0100 > +++ gcc/dwarf2out.cc 2024-01-30 17:23:41.249054946 +0100 > @@ -19027,6 +19027,7 @@ loc_list_from_tree_1 (tree loc, int want > && ! DECL_IGNORED_P (loc) > && (INTEGRAL_TYPE_P (TREE_TYPE (loc)) > || POINTER_TYPE_P (TREE_TYPE (loc))) > + && TYPE_MODE (TREE_TYPE (loc)) != BLKmode > && (GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (loc))) > <= DWARF2_ADDR_SIZE)) > { > --- gcc/testsuite/gcc.dg/bitint-80.c.jj 2024-01-30 17:30:02.843696120 +0100 > +++ gcc/testsuite/gcc.dg/bitint-80.c 2024-01-30 17:32:33.301583203 +0100 > @@ -0,0 +1,15 @@ > +/* PR debug/113637 */ > +/* { dg-do compile { target bitint } } */ > +/* { dg-options "-g -std=c23" } */ > + > +#if __BITINT_MAXWIDTH__ >= 639 > +typedef _BitInt(639) B; > +#else > +typedef _BitInt(63) B; > +#endif > + > +void > +foo (B n) > +{ > + extern void bar (int [][n]); > +} > > Jakub > >
--- gcc/dwarf2out.cc.jj 2024-01-24 13:11:21.132468150 +0100 +++ gcc/dwarf2out.cc 2024-01-30 17:23:41.249054946 +0100 @@ -19027,6 +19027,7 @@ loc_list_from_tree_1 (tree loc, int want && ! DECL_IGNORED_P (loc) && (INTEGRAL_TYPE_P (TREE_TYPE (loc)) || POINTER_TYPE_P (TREE_TYPE (loc))) + && TYPE_MODE (TREE_TYPE (loc)) != BLKmode && (GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (loc))) <= DWARF2_ADDR_SIZE)) { --- gcc/testsuite/gcc.dg/bitint-80.c.jj 2024-01-30 17:30:02.843696120 +0100 +++ gcc/testsuite/gcc.dg/bitint-80.c 2024-01-30 17:32:33.301583203 +0100 @@ -0,0 +1,15 @@ +/* PR debug/113637 */ +/* { dg-do compile { target bitint } } */ +/* { dg-options "-g -std=c23" } */ + +#if __BITINT_MAXWIDTH__ >= 639 +typedef _BitInt(639) B; +#else +typedef _BitInt(63) B; +#endif + +void +foo (B n) +{ + extern void bar (int [][n]); +}