[gcn] install.texi: Update for new ISA targets and their requirements
[gcc.git] / gcc / testsuite / g++.dg / contracts / contracts-pre4.C
blobf658123aaa5ecfbe3a17c924f2bd5b8f5a08a4bb
1 // test that contracts on overriding functions are found correctly
2 // { dg-do run }
3 // { dg-options "-std=c++2a -fcontracts -fcontract-continuation-mode=on" }
5 struct Base
7   virtual int f(int a) [[ pre: a > 0 ]];
8 };
10 int Base::f(int a)
12   return a + 10;
15 // inherits original
16 struct Child0 : Base
20 // defined out of line, explicit override
21 struct Child1 : Base
23   virtual int f(int a) override;
26 int Child1::f(int a)
28   return a + 20;
31 // defined out of line
32 struct Child2 : Base
34   int f(int a);
37 int Child2::f(int a)
39   return a + 30;
42 // defined inline, explicitly override
43 struct Child3 : Base
45   virtual int f(int a) override
46   {
47     return a + 40;
48   }
51 // defined inline
52 struct Child4 : Base
54   int f(int a)
55   {
56     return a + 50;
57   }
60 #include <cstdio>
61 int main(int, char**)
63   Base b;
64   Child0 c0;
65   Child1 c1;
66   Child2 c2;
67   Child3 c3;
68   Child4 c4;
70   printf("Base: %d\n", b.f(-10));
71   printf("Child0: %d\n", c0.f(-10));
72   printf("Child1: %d\n", c1.f(-10));
73   printf("Child2: %d\n", c2.f(-10));
74   printf("Child3: %d\n", c3.f(-10));
75   printf("Child4: %d\n", c4.f(-10));
77   return 0;
80 // { dg-skip-if "requires hosted libstdc++ for cstdio" { ! hostedlib } }
81 // { dg-output "contract violation in function Base::f at .*.C:7: .*(\n|\r\n|\r)" }
82 // { dg-output "Base: 0(\n|\r\n|\r)" }
83 // { dg-output "contract violation in function Base::f at .*.C:7: .*(\n|\r\n|\r)" }
84 // { dg-output "Child0: 0(\n|\r\n|\r)" }
85 // { dg-output "contract violation in function Child1::f at .*.C:7: .*(\n|\r\n|\r)" }
86 // { dg-output "Child1: 10(\n|\r\n|\r)" }
87 // { dg-output "contract violation in function Child2::f at .*.C:7: .*(\n|\r\n|\r)" }
88 // { dg-output "Child2: 20(\n|\r\n|\r)" }
89 // { dg-output "contract violation in function Child3::f at .*.C:7: .*(\n|\r\n|\r)" }
90 // { dg-output "Child3: 30(\n|\r\n|\r)" }
91 // { dg-output "contract violation in function Child4::f at .*.C:7: .*(\n|\r\n|\r)" }
92 // { dg-output "Child4: 40(\n|\r\n|\r)" }