| /* { 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; |
| } |