summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/cpp2a/builtin-clear-padding1.C
blob: 7b1282e7798e04e4f867f03e8e5efe3461351fc4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// PR tree-optimization/102586
// { dg-do compile }
// { dg-options "-Wno-inaccessible-base" }

struct C0 {};
struct C1 {};
struct C2 : C1, virtual C0 {};
struct C3 : virtual C2, C1 {};
struct C4 : virtual C3, C1 {};
struct C5 : C4 {};
struct C6 { char c; };
struct C7 : virtual C6, virtual C3, C1 {};
struct C8 : C7 {};

void
foo (C0 *c0, C1 *c1, C2 *c2, C3 *c3, C4 *c4, C5 *c5, C6 *c6, C7 *c7, C8 *c8)
{
  __builtin_clear_padding (c0);
  __builtin_clear_padding (c1);
  __builtin_clear_padding (c2);	// { dg-error "argument 1 in call to function '__builtin_clear_padding' has pointer to a non-trivially-copyable type \\\('C2\\\*'\\\)" }
  __builtin_clear_padding (c3);	// { dg-error "argument 1 in call to function '__builtin_clear_padding' has pointer to a non-trivially-copyable type \\\('C3\\\*'\\\)" }
  __builtin_clear_padding (c4);	// { dg-error "argument 1 in call to function '__builtin_clear_padding' has pointer to a non-trivially-copyable type \\\('C4\\\*'\\\)" }
  __builtin_clear_padding (c5);	// { dg-error "argument 1 in call to function '__builtin_clear_padding' has pointer to a non-trivially-copyable type \\\('C5\\\*'\\\)" }
  __builtin_clear_padding (c6);
  __builtin_clear_padding (c7);	// { dg-error "argument 1 in call to function '__builtin_clear_padding' has pointer to a non-trivially-copyable type \\\('C7\\\*'\\\)" }
  __builtin_clear_padding (c8);	// { dg-error "argument 1 in call to function '__builtin_clear_padding' has pointer to a non-trivially-copyable type \\\('C8\\\*'\\\)" }
}

void
bar ()
{
  C0 c0;
  C1 c1;
  C2 c2;
  C3 c3;
  C4 c4;
  C5 c5;
  C6 c6;
  C7 c7;
  C8 c8;
  __builtin_clear_padding (&c0);
  __builtin_clear_padding (&c1);
  __builtin_clear_padding (&c2);
  __builtin_clear_padding (&c3);
  __builtin_clear_padding (&c4);
//  __builtin_clear_padding (&c5);
  __builtin_clear_padding (&c6);
  __builtin_clear_padding (&c7);
  __builtin_clear_padding (&c8);
}