Hi everyone, but especially Diego :-)

it seems to me that our new C++ vectors have some problems holding
derived classes.  For example, when try to compile the following

  struct zzzA
  {
    int kind;
  };
  
  struct zzzB : public zzzA
  {
    int some, data, here;
  };
  
  struct container
  {
    vec <zzzB> my_vec;
  };
  static struct container my_cnt;
  
  /* and then somewhere later do */
  my_cnt.my_vec.create (8);

I get the following warnings:

In file included from /home/mjambor/gcc/small/src/gcc/tree.h:27:0,
                 from /home/mjambor/gcc/small/src/gcc/ipa-cp.c:106:
/home/mjambor/gcc/small/src/gcc/vec.h: In instantiation of ‘static size_t 
vec<T, A, vl_embed>::embedded_size(unsigned int) [with T = zzzB; A = va_heap; 
size_t = long unsigned int]’:
/home/mjambor/gcc/small/src/gcc/vec.h:298:64:   required from ‘static void 
va_heap::reserve(vec<T, va_heap, vl_embed>*&, unsigned int, bool) [with T = 
zzzB]’
/home/mjambor/gcc/small/src/gcc/vec.h:1468:5:   required from ‘bool vec<T, A, 
vl_ptr>::reserve(unsigned int, bool) [with T = zzzB; A = va_heap]’
/home/mjambor/gcc/small/src/gcc/vec.h:1482:45:   required from ‘bool vec<T, A, 
vl_ptr>::reserve_exact(unsigned int) [with T = zzzB; A = va_heap]’
/home/mjambor/gcc/small/src/gcc/vec.h:1497:5:   required from ‘void vec<T, A, 
vl_ptr>::create(unsigned int) [with T = zzzB; A = va_heap]’
/home/mjambor/gcc/small/src/gcc/ipa-cp.c:3608:26:   required from here
/home/mjambor/gcc/small/src/gcc/vec.h:1091:63: warning: invalid access to 
non-static data member ‘vec<zzzB, va_heap, vl_embed>::vecdata_’  of NULL object 
[-Winvalid-offsetof]
/home/mjambor/gcc/small/src/gcc/vec.h:1091:63: warning: (perhaps the ‘offsetof’ 
macro was used incorrectly) [-Winvalid-offsetof]
rm -rf libbackend.a

Note that in the warning messages, the template parameters of vec
change from (IMHO correct) vec<T, A, vl_ptr> to (IMHO wrong)
vec<T, va_heap, vl_embed>.  

When I remove the ": public zzzA" part the earnings disappear.  Thus,
it seems there is an error somewhere... or am I doing something wrong?

Thanks,

Martin

Reply via email to