blob: f991ef8644eb3d4c3f99fa0c5d10e600c94a9542 [file] [log] [blame]
// Basic test to ensure that guarded templates correctly serialize and
// deserialize their contracts through the CMI.
// { dg-additional-options "-fmodules-ts -fcontracts -fcontract-continuation-mode=on" }
module;
#include <cstdio>
#include <experimental/contract>
export module foo;
// { dg-module-cmi foo }
export int violation_count{0};
extern "C++" export void handle_contract_violation(const std::experimental::contract_violation &violation)
{
violation_count++;
printf("violation_count: %d\n", violation_count);
}
export int nontemplate(int n)
[[ pre: n > 0 ]]
[[ post r: r > 0 ]]
{
return -n;
}
export
template<typename T>
T fn(T n)
[[ pre: n > 0 ]]
[[ post r: r > 0 ]]
{
printf("%s(%d)\n", __FUNCTION__, n);
return n;
}
export
template<typename T>
void void_fn(T n)
[[ pre: n < 0 ]]
{
printf("%s(%d)\n", __FUNCTION__, n);
}
export void foo_fn()
{
fn(5);
}