http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56403



Jakub Jelinek <jakub at gcc dot gnu.org> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

                 CC|                            |jakub at gcc dot gnu.org,

                   |                            |jason at gcc dot gnu.org

   Target Milestone|---                         |4.6.4

            Summary|internal compiler error: in |[4.6/4.7/4.8 Regression]

                   |build_zero_init_1, at       |internal compiler error: in

                   |cp/init.c:279               |build_zero_init_1, at

                   |                            |cp/init.c:279



--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-02-20 
07:05:27 UTC ---

My guess is this started with

http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=126399

but haven't verified (all I know is that r126000 didn't ICE, r127000 does).



I think the problem is that (*lang_hooks.types.make_type) (RECORD_TYPE)

doesn't create CLASS_TYPE_P, which is what I think is generally desirable at

least for the middle-end va_list aggregates (and supposedly other records too,

though they likely can't appear in user code).



One way would be just during the initialization of C++ FE to fix up the

RECORD_TYPE embedded in va_list, but that wouldn't work well on i?86 which

creates several va_list records for the different ABIs.

We have cxx_make_type which doesn't create CLASS_TYPE_P, and make_class_type

which does, but only handles RECORD_TYPE and UNION_TYPE.

So, perhaps the lang hook make_type should be some other function, that for

code == RECORD_TYPE || code == UNION_TYPE calls make_class_type, otherwise

calls cxx_make_type?

Reply via email to