This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[C++] fix a latent bug in cp-tree.h


Hi,

While working on switch lowering for trees, I got a bootstrap error because
in one of the c++ gt headers, a switch label was out of range of the switch's
controlling expression.  This turned out to be a switch with three case labels
on a single-bit bitfield, is_lang_type_class in struct lang_type_header.
The attached patch should fix that.  Is it safe to use GTY((skip(""))) in a
union like this?  Bootstapping/testing on amd64 seems to think so, but
I'd like to be sure and hear from the experts :)

Gr.
Steven



Index: cp/cp-tree.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cp/cp-tree.h,v
retrieving revision 1.968
diff -c -3 -p -r1.968 cp-tree.h
*** cp/cp-tree.h        20 May 2004 11:36:14 -0000      1.968
--- cp/cp-tree.h        27 May 2004 12:20:51 -0000
*************** struct lang_type GTY(())
*** 1091,1097 ****
  {
    union lang_type_u
    {
!     struct lang_type_header GTY((tag ("2"))) h;
      struct lang_type_class  GTY((tag ("1"))) c;
      struct lang_type_ptrmem GTY((tag ("0"))) ptrmem;
    } GTY((desc ("%h.h.is_lang_type_class"))) u;
--- 1091,1097 ----
  {
    union lang_type_u
    {
!     struct lang_type_header GTY((skip (""))) h;
      struct lang_type_class  GTY((tag ("1"))) c;
      struct lang_type_ptrmem GTY((tag ("0"))) ptrmem;
    } GTY((desc ("%h.h.is_lang_type_class"))) u;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]