Home | History | Annotate | Download | only in jni
      1 // { dg-do run  }
      2 // check MI and VBC offsets on throw
      3 extern "C" void abort ();
      4 extern "C" void exit (int);
      5 
      6 struct A {
      7     int x[23];
      8 };
      9 
     10 struct B : virtual public A {
     11     int y[33];
     12 };
     13 
     14 struct C : virtual public A, public B {
     15     int z[43];
     16 };
     17 
     18 struct D {
     19     int xx[53];
     20 };
     21 
     22 struct E : public D, public A {
     23     int yy[63];
     24 };
     25 
     26 C c;
     27 
     28 E e;
     29 
     30 void f1()
     31 {
     32     throw (C*)0;
     33 }
     34 
     35 void f2()
     36 {
     37     throw &c;
     38 }
     39 
     40 void f3()
     41 {
     42     throw (E*)0;
     43 }
     44 
     45 void f4()
     46 {
     47     throw &e;
     48 }
     49 
     50 int main()
     51 {
     52     int flag;
     53 
     54     flag = 0;
     55     try {
     56         f1();
     57     }
     58     catch (A* p) {
     59         if (p)
     60             abort();
     61         flag = 1;
     62     }
     63     if (!flag)
     64         abort();
     65 
     66     flag = 0;
     67     try {
     68         f2();
     69     }
     70     catch (A* p) {
     71         if (!p || (void*)p == (void*)&c)
     72             abort();
     73         flag = 1;
     74     }
     75     if (!flag)
     76         abort();
     77 
     78     flag = 0;
     79     try {
     80         f3();
     81     }
     82     catch (A* p) {
     83         if (p)
     84             abort();
     85         flag = 1;
     86     }
     87     if (!flag)
     88         abort();
     89 
     90     flag = 0;
     91     try {
     92         f4();
     93     }
     94     catch (A* p) {
     95         if (!p || (void*)p == (void*)&e)
     96             abort();
     97         flag = 1;
     98     }
     99     if (!flag)
    100         abort();
    101 
    102     exit(0);
    103 }
    104