| /* { dg-do run } */ | 
 | /* Check that classes with virtual member functions works, | 
 |    when using it as declared type. */ | 
 | struct base { | 
 |     float data [100]; | 
 |  | 
 |     base() = default; | 
 |     virtual ~base() = default; | 
 | }; | 
 |  | 
 | struct derived : public base { | 
 |     int scalar, array[5]; | 
 |  | 
 |     derived() = default; | 
 |     void do_work () | 
 |     { | 
 |       int error = 0; | 
 |       #pragma omp target map (tofrom: this[:1], error) | 
 |       { | 
 | 	if (scalar != 42 || this->array[0] != 123 || array[4] != 555) | 
 | 	  error = 1; | 
 | 	if (data[0] != 333 || data[99] != -3) | 
 | 	  error = 1; | 
 | 	this->scalar = 99; | 
 | 	array[0] = 5; | 
 | 	array[4] = -4; | 
 | 	this->data[0] = 11; | 
 | 	this->data[99] = 99; | 
 |       } | 
 |       if (error) | 
 | 	__builtin_abort (); | 
 |       if (data[0] != 11 || data[99] != 99) | 
 | 	__builtin_abort (); | 
 |       if (scalar != 99 || array[0] != 5 || array[4] != -4) | 
 | 	__builtin_abort (); | 
 |     }    | 
 | }; | 
 |  | 
 | int | 
 | main () | 
 | { | 
 |   struct derived x; | 
 |   x.data[0] = 333; | 
 |   x.data[99] = -3; | 
 |   x.scalar = 42; | 
 |   x.array[0] = 123; | 
 |   x.array[4] = 555; | 
 |   x.do_work (); | 
 |   return 0; | 
 | } |