// Small test to ensure that the level and role information printed by various // contract configurations is correct. // { dg-do run } // { dg-options "-std=c++2a -fcontracts -fcontract-role=default:maybe,maybe,ignore" } int fun(int n) [[ post default r: r > 0 ]] { return -n; } int main(int, char **) { [[ assert default: false ]]; [[ assert: false ]]; [[ assert audit: false ]]; [[ assert default %new_role: false ]]; [[ assert %new_role: false ]]; [[ assert audit %new_role: false ]]; [[ assert check_maybe_continue: false ]]; [[ assert %default: false ]]; [[ assert audit %default: false ]]; fun(5); return 0; } // { dg-skip-if "requires hosted libstdc++ for stdc++exp" { ! hostedlib } } // { dg-output {contract violation in function main at .*:14: false(\n|\r\n|\r)} } // { dg-output {\[continue:on\](\n|\r\n|\r)} } // { dg-output {contract violation in function main at .*:15: false(\n|\r\n|\r)} } // { dg-output {\[continue:on\](\n|\r\n|\r)} } // { dg-output {contract violation in function main at .*:16: false(\n|\r\n|\r)} } // { dg-output {\[level:audit, continue:on\](\n|\r\n|\r)} } // { dg-output {contract violation in function main at .*:17: false(\n|\r\n|\r)} } // { dg-output {\[role:new_role, continue:on\](\n|\r\n|\r)} } // { dg-output {contract violation in function main at .*:18: false(\n|\r\n|\r)} } // { dg-output {\[role:new_role, continue:on\](\n|\r\n|\r)} } // { dg-output {contract violation in function main at .*:19: false(\n|\r\n|\r)} } // { dg-output {\[level:audit, role:new_role, continue:on\](\n|\r\n|\r)} } // { dg-output {contract violation in function main at .*:20: false(\n|\r\n|\r)} } // { dg-output {\[level:, role:, continue:on\](\n|\r\n|\r)} } // { dg-output {contract violation in function main at .*:21: false(\n|\r\n|\r)} } // { dg-output {\[continue:on\](\n|\r\n|\r)} } // { dg-output {contract violation in function main at .*:22: false(\n|\r\n|\r)} } // { dg-output {\[level:audit, continue:on\](\n|\r\n|\r)} } // { dg-output {contract violation in function fun at .*:7: r > 0(\n|\r\n|\r)} } // { dg-output {\[continue:on\](\n|\r\n|\r)} }