// { dg-additional-options "-fmodules-ts" }
import One;
import Two;

struct derived : middle
{
  long long d;

  derived (int b_, int m_, int d_)
    : middle (b_, m_), d (d_)
  {
  }
};

int check (derived *d)
{
  if ((char *)&d->b != (char *)&d->d + sizeof (long long))
    return 3;
  if ((char *)&d->d != (char *)&d->m + sizeof (long long))
    return 4;
  return 0;
}


int main ()
{
  middle m (1, 2);


  if (m.b != 1 || m.m != 2)
    return 1;

  derived d (1, 2, 3);
  
  if (d.b != 99 || d.m != 2 || d.d != 3)
    return 2;

  return check (&d);
}
